Score:0

รับเส้นทาง (นามแฝง) จากแบบสอบถาม SQL

ธง in

ฉันมีแบบสอบถาม SQL เพื่อรับโหนดทั้งหมดที่มี ID, ชื่อ, วันที่เผยแพร่, วันที่เปลี่ยนแปลง ฯลฯ

นอกจากนี้ ฉันต้องได้รับเส้นทางไปยังแต่ละรายการ (อาจมาจาก path_alias.alias)

ตอนนี้ฉันมีดังต่อไปนี้ (ไม่มีนามแฝง):

เลือก MIN(node_field_data.nid) AS nid,node_field_data.type, node_field_data.status, node_field_data.title, node_field_data.langcode AS node_field_data_langcode, node_field_data.created, node_field_data.changed
จาก
node_field_data
INNER JOIN โหนดบน node_field_data.nid = node.nid
จัดกลุ่มตาม node.nid, node_field_data.change, node_field_data_langcode
สั่งซื้อโดย node_field_data.nid DESC;

มีความคิดอย่างไรที่จะได้รับมัน?

cn flag
เป็นวิธีที่รวดเร็วและสกปรกในการสืบค้น คุณสามารถสร้างมุมมองที่ทำสิ่งที่คุณต้องการ แล้วเปิด "แสดงแบบสอบถาม SQL" ในตัวเลือกการดูแลระบบมุมมอง
in flag
ใช่ มันเป็นสิ่งที่ฉันทำ แต่ขยายแบบสอบถามนี้เล็กน้อยเนื่องจากฉันต้องการบันทึกผลลัพธ์เป็น CSV...การดูให้ข้อความค้นหาที่แตกต่างจากที่ฉันต้องการเล็กน้อย
Score:2
ธง in

หากคุณต้องการเข้าถึงเอนทิตี Drupal คุณควรใช้ EntityTypeManager's getStorage() วิธีการส่งคืนตัวควบคุมหน่วยเก็บข้อมูลสำหรับโหนด:

// รับการอ้างอิงตัวจัดการที่เก็บข้อมูลสำหรับโหนด
$node_storage = \Drupal::entityTypeManager()->getStorage("โหนด");
// โหลดโหนดตามอำเภอใจ ตามที่ระบุโดยตัวแปร $nid
$node = $node_storage->load($nid);

เนื่องจากโหนดเป็นเอนทิตีเนื้อหาประเภทหนึ่ง คุณจึงมี API ทั้งหมดตามที่กำหนดโดย Drupal\node\NodeInterfaceที่จะทำงานร่วมกับ ซึ่งรวมถึงความสามารถในการโทร:

// รับเส้นทางภายใน นามแฝงเส้นทางถ้ามี สำหรับเอนทิตี
$node->toUrl()->toString();

สำหรับข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับวิธีการทำงานกับเอนทิตีใน Drupal โปรดดูโพสต์นี้ ซึ่งฉันยืมมาจากตัวอย่างด้านบน: https://www.drupal.org/docs/drupal-apis/entity-api/working-with-the-entity-api

in flag
ฉันไม่ต้องการสิ่งนั้น ข้อความค้นหานี้จะใช้งานได้นอก Drupal เนื่องจากคุณเห็นว่าเป็นการสืบค้น SQL โดยตรง
in flag
ฉันเข้าใจอย่างถ่องแท้ :) ผลปรากฎว่า แนวทางปฏิบัติที่ดีที่สุดคือการใช้ชั้นเอนทิตีเพื่อจัดการ สืบค้น และแก้ไขเอนทิตีใน Drupalในการข้ามระบบย่อยที่กำหนด คุณจะต้องต่อสู้กับการต่อสู้ที่ยากเย็นแสนเข็ญ ซึ่งคุณจะต้องโหลดเอนทิตีโหนดเพื่อให้บรรลุตามที่คุณต้องการ นอกจากนี้ สิ่งต่างๆ เช่น ค่าคุณสมบัติภายในและชื่อตารางจะไม่ได้รับการพิจารณาและอาจเปลี่ยนแปลงโดยไม่คาดคิด รับประกัน API; การดำเนินการไม่ได้
apaderno avatar
us flag
ใน Drupal 8 นามแฝงพาธก็เป็นเอนทิตีเช่นกัน แม้ว่าโหนดและนามแฝงของเส้นทางจะไม่ใช่เอนทิตี การใช้ API ที่มีอยู่จะดีกว่าเสมอ แทนที่จะสอบถามฐานข้อมูล Drupal โดยตรง Drupal สามารถเปิดเผย REST API ได้เช่นกัน ซึ่งทำให้สามารถสืบค้นเอนทิตีได้โดยไม่ต้องทราบรายละเอียดว่าตารางฐานข้อมูลใดใช้เพื่อจุดประสงค์ใด หรือช่องใดที่ตารางเหล่านั้นมี
apaderno avatar
us flag
ใช่ ฉันอยากจะเรียกใช้โค้ด PHP เพื่อทำงานนั้นมากกว่าการสืบค้นฐานข้อมูลจากเทอร์มินัล MySQL สิ่งนี้จำเป็นต้องบูต Drupal หากโค้ด PHP ไม่ได้มีไว้สำหรับโมดูล Drupal แต่เป็นสคริปต์ภายนอกที่เข้าถึงข้อมูล Drupal (มันอยู่ภายนอกจากมุมมองของ Drupal) อีกทางหนึ่ง ฉันจะใช้ REST API Drupal หากข้อมูลนั้นจำเป็นในโค้ดที่ไม่ได้เขียนด้วย PHP

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา