วิธีที่ยั่งยืนที่สุดในการรับข้อมูลโดยรวมในทุ่งนาคืออะไร?


12

EntityFieldQuery ไม่ได้มีวัตถุประสงค์เพื่อใช้ในการเรียกใช้ฟังก์ชั่นรวม (SUM, AVG, ฯลฯ ) ในข้อมูลภาคสนามเพราะเป็นผู้ไม่เชื่อเรื่องพระเจ้า SQL ที่กล่าวว่าการดำเนินการดังกล่าวถูกต้องตามกฎหมายจะต้องเรียกใช้เป็นครั้งคราว ตามฟังก์ชั่น SQL กับ EntityFieldQueryและEntityFieldQueryโดยเฉพาะและวิธีการใช้ฟังก์ชั่นรวม SUM, ARG และ MAXแบบสอบถาม SQL จำเป็นต้องใช้และวิธีการที่เหมาะกับกรณีการใช้งานของฉันที่ดีที่สุด ฉันกำลังพูดกับ @chx เมื่อวานนี้และเขาแนะนำให้ใช้ฟังก์ชันภายในสองอย่างเพื่อค้นหาชื่อฟิลด์และชื่อคอลัมน์ ฉันแค่สงสัยว่าสิ่งนี้จะยั่งยืนหรือไม่และถ้ามันเหมาะสมที่จะทำใน codebase ที่ฉันอาจปล่อยให้เป็นเวลานาน

ถ้ามันเป็นวิธีที่ดีที่สุดมันก็เป็นวิธีที่ดีที่สุด ฉันไม่ต้องการที่จะทำก่อนที่ฉันจะแน่ใจอย่างแน่นอนเพราะมันรู้สึกยุ่ง


สำหรับตอนนี้ฉันเพิ่งใช้ฟังก์ชันภายใน ( _field_sql_storage_tablename($field)และ_field_sql_storage_columnname($field_name, $column) ที่ตรงกับความต้องการในปัจจุบันของฉัน แต่มันไม่ยั่งยืนดังนั้นจึงยังสนใจที่จะตอบคำถามนี้
wizonesolutions

คำตอบ:


2

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

ฟิลด์มุมมองช่วยให้คุณเข้าถึงตารางฟิลด์ได้โดยตรงซึ่งหมายความว่าฟังก์ชั่นรวมจะทำงานอย่างถูกต้อง นอกจากนี้หากคุณต้องการเข้าร่วม "น่าสนใจ" ในตารางของเขตข้อมูลอื่นคุณสามารถควบคุมได้อย่างสมบูรณ์โดยใช้สิ่งต่อไปนี้

/**
 * Implements hook_views_data_alter().
 */
function mymodule_views_data_alter(&$data) {
  views_field_add_multi_join($data, /* see docs */);
}

ซึ่งค่อนข้างใช้งานง่ายและช่วยให้คุณสามารถรวมฟังก์ชั่นการทำงานในหลาย ๆ ตารางฟิลด์พร้อมกันได้ จากนั้นคุณสามารถเรียกใช้มุมมองด้วยตนเอง$view->execute()และดึงผลลัพธ์ออกจากมุมมอง มีตัวอย่างของสิ่งนี้ในเอกสารมุมมอง

ประโยชน์ของวิธีการนี้เหนือ EntityFieldQuery คือคุณสามารถจัดการกระบวนการใน Views (ซึ่งเกือบทุกคนจะใช้อยู่แล้ว) และอนุญาตให้ดำเนินการสร้างคิวรีแบบฟิสิคัลในวิธีที่ไม่ตรงซึ่งช่วยยกระดับการแตกหักที่เป็นไปได้ นอกจากนี้หลายครั้งคุณจะต้องการแสดงข้อมูลรวมดังกล่าวบนหน้าจอผู้ดูแลระบบซึ่งคุณสามารถใช้มุมมองเพื่อให้ทั้งจอแสดงผลและเข้าถึงผลลัพธ์ในรหัสเพื่อวัตถุประสงค์เพิ่มเติม


ฉันจะต้องตรวจสอบนี้ ฉันสามารถเปลี่ยนรหัสนั้นเป็นเขตข้อมูลที่คำนวณได้ของฉันแทนการทำแบบสอบถามด้วยตนเอง ฉันอาจจะทำงานบนไซต์ที่ฉันต้องการสิ่งนี้ในไม่ช้าและจะรายงานกลับในบางจุด ถ้าได้ผลฉันจะยอมรับ
wizonesolutions

0

สิ่งนี้สามารถทำได้ในโมดูลเสริมเพื่อดู? สามารถจัดการคิวรีได้เป็นอย่างดีและผลลัพธ์บางอย่างถูกเผยแพร่ด้วยฟังก์ชันการรวมเช่นในการดำเนินการเมื่อตัวกรองเชิงบริบทล้มเหลวซึ่งสามารถกำหนดค่าเริ่มต้นให้กับค่าทั้งหมดและให้นับจำนวนผลลัพธ์ที่มีในแต่ละรายการ ควรมีฟังก์ชั่นการสืบค้น แต่จะต้องมีแบบฟอร์ม UI แจ้งให้เราทราบหากนี่เหมาะสม ฉันเพิ่งเริ่มแยกมุมมองและคาดเดา


สามารถใช้คำค้นหา COUNT รายการในเอนทิตีได้ดังนั้นจึงได้รับการแก้ไข ฉันสนใจ SUM มากขึ้น views_calc อาจให้ข้อมูลเชิงลึก แต่ฉันต้องการใช้ค่าในฟิลด์คำนวณ ... ซึ่งฉันสามารถทำได้กับ views_get_view_result (หรือคล้ายกัน) อย่างไรก็ตามการเรียกดูเพื่อสร้างแบบสอบถามนั้นในตอนแรกเป็นเคล็ดลับ ดูเหมือนว่าวิธีการแฮ็กอาจดีที่สุด ฉันเดาว่าฉันจะเริ่มต้นด้วยเพราะถ้าฉันไม่ปล่อยฉันจะเป็นสีทอง ถ้าฉันทำบางคนหวังว่าจะส่งแพทช์
wizonesolutions
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.