ฉันมีคำถามในใจว่าอะไรคือความแตกต่างที่แน่นอนระหว่างแอตทริบิวต์ส่วนขยายและแอตทริบิวต์ที่กำหนดเอง ?
ใครที่นี่ที่สามารถให้ความคิดกับฉันได้บ้าง!
ฉันมีคำถามในใจว่าอะไรคือความแตกต่างที่แน่นอนระหว่างแอตทริบิวต์ส่วนขยายและแอตทริบิวต์ที่กำหนดเอง ?
ใครที่นี่ที่สามารถให้ความคิดกับฉันได้บ้าง!
คำตอบ:
แอตทริบิวต์ที่กำหนดเองคือคุณสมบัติที่เพิ่มเข้ามาเพื่ออธิบายถึงเอนทิตีเช่นคุณลักษณะของผลิตภัณฑ์, คุณลักษณะของลูกค้าเป็นต้นเหล่านี้เป็นส่วนย่อยของแอตทริบิวต์ EAV
แอตทริบิวต์ส่วนขยายในทางกลับกันโดยทั่วไปจะใช้สำหรับชนิดข้อมูลที่ซับซ้อนมากขึ้นเช่นการเพิ่มข้อมูลที่ซับซ้อนเพิ่มเติมลงในเอนทิตีจากตารางภายนอกที่กำหนดเอง
กล่าวง่ายๆคือแอตทริบิวต์ที่กำหนดเองนั้นเป็นไปตามมาตรฐาน EAV ในขณะที่แอตทริบิวต์ส่วนขยายใช้สำหรับข้อมูลที่ซับซ้อนมากขึ้นซึ่งแอตทริบิวต์ที่กำหนดเองไม่สามารถจัดการได้
แอตทริบิวต์ที่กำหนดเองคือสิ่งที่เพิ่มเข้ามาในนามของผู้ขาย ตัวอย่างเช่นผู้ค้าอาจต้องเพิ่มแอตทริบิวต์ที่กำหนดเองให้กับเอนทิตีผลิตภัณฑ์ชื่อ 'ปรับแต่งได้' ซึ่งเขาต้องการบันทึกข้อมูลว่าผลิตภัณฑ์นี้จะได้รับการปรับแต่งจากบุคคลที่สามหรือไม่
ทั้งแอตทริบิวต์ที่กำหนดเองและส่วนขยายมีฟังก์ชันการทำงานเล็กน้อยเหมือนกัน (เพื่อเก็บข้อมูล) แต่มีความแตกต่างอย่างมากระหว่างฟังก์ชันที่กำหนดเองและคุณลักษณะส่วนขยาย เช่น
เราสามารถเพิ่มเกณฑ์การค้นหาพิเศษด้วยแอตทริบิวต์ส่วนขยายโดยการเข้าร่วมกับตารางฐานข้อมูลอื่น เราสามารถตรวจสอบได้โดยการเพิ่ม ACL เข้าไป ให้อธิบายรายละเอียดเล็กน้อย
โปรดดูตัวอย่างต่อไปนี้ คุณต้องสร้าง /etc/extension_attributes.xml
<config>
<extension_attributes for="Path\To\Interface">
<attribute code="name_of_attribute" type="datatype">
<resources>
<resource ref="permission"/>
</resources>
<join reference_table="" reference_field="" join_on_field="">
<field>field1</field>
<field>field2</field>
</join>
</attribute>
</extension_attributes>
</config>
การค้นหาแอตทริบิวต์ส่วนขยาย: ในแท็กเข้าร่วมคุณสามารถกำหนดตารางที่เกี่ยวข้องที่คุณต้องการเข้าร่วมและรับข้อมูลจากตารางนี้ ใน reference_tableแอตทริบิวต์คุณจะต้องให้ชื่อตารางในขณะที่reference_fieldจะเป็นคีย์หลัก (คีย์ตารางแรกที่แอตทริบิวต์ส่วนขยายนี้สร้างเช่นในตัวอย่างนี้สินค้า) ที่คุณใส่ความสัมพันธ์ของคุณ / เข้าร่วม join_on_fieldเป็นชื่อที่แนะนำจะเป็นตารางที่สองที่เราต้องการบันทึก ภายใต้แท็กฟิลด์คุณสามารถเพิ่มฟิลด์ที่จำเป็นทั้งหมดของคุณจริง ๆ แล้วคุณต้องการรับข้อมูล
การพิสูจน์ตัวตนของแอตทริบิวต์ส่วนขยาย: คุณสามารถ จำกัด ค่าแอตทริบิวต์ส่วนขยายนี้โดยใช้แท็กเพื่อให้เข้าใจว่า Lets นี้มีตัวอย่าง สมมติว่าเรามีแอตทริบิวต์ส่วนขยายมากกว่าหนึ่งรายการสำหรับผลิตภัณฑ์และหนึ่งในนั้นกล่าวว่า extra_special_price เราไม่ต้องการแสดงให้ผู้ใช้ทุกคนเห็น เราสามารถ จำกัด คุณสมบัตินี้ ดูตัวอย่างต่อไปนี้
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">
<extension_attributes for="Magento\Catalog\Api\Data\ProductInterface">
<attribute code="stock_item" type="Magento\CatalogInventory\Api\Data\StockItemInterface">
<resources>
<resource ref="Magento_CatalogInventory::cataloginventory"/>
</resources>
</attribute>
</extension_attributes>
<attribute code="logo_size" type="string">
</attribute>
</config>
ในตัวอย่างนี้แอ็ตทริบิวต์ stock_item ถูก จำกัด เฉพาะผู้ใช้ที่มี Magento_CatalogInventory :: cataloginventory สิทธิ์ในขณะที่ logo_size ไม่มีเงื่อนไขใด ๆ
ดังนั้นตอนนี้ถ้าคุณได้รับวัตถุผลิตภัณฑ์ (ในทางที่เคยผ่าน api หรือจากเว็บ) หากผู้ใช้ปัจจุบันมีสิทธิ์สำหรับแคตตาล็อกสินค้าคงคลังเขาจะได้รับค่า stock_items เท่านั้น
ไม่อยู่ในขอบเขตของคำถามนี้ แต่ให้ดูว่าคุณจะสร้างแอททริบิวได้อย่างไรโดยใช้ custom_extension ในลิงค์ต่อไปนี้ในวิธีที่ง่ายมาก: วิธีสร้าง extension_attributes