في Drupal 7 ، تحدد وثائق واجهة برمجة التطبيقات لـ node_load_multiple()
استخدام المعلمة $conditions
تم إيقافها لصالح استخدام EntityFieldQuery
. كيف استخدم الفئة لإنشاء قائمة بمعرفات العقدة للاستخدام مع node_load_multiple()
؟ هل هناك حالات استخدام أخرى لها؟
يستخدم EntityFieldQuery مجموعة من السنانير للتفاعل مع وحدات التخزين الميدانية ، مثل تخزين SQL الحقل ، من أجل العمل على الحقول بالإضافة إلى خصائص العقدة الأخرى. على المدى الطويل ، يعد EntityFieldQuery طريقة أكثر موثوقية للاستعلام عن أي نوع من الكيانات ، وفي بعض الحالات يمكنه إجراء استعلامات عبر كيان (انظر field_has_data أو _ list_values_in_use () للحصول على مثال.
في ما يلي مثال بسيط على استخدام EntityFieldQuery للحصول على قائمة بجميع العقد المنشورة قبل الطابع الزمني المحدد:
$query = new EntityFieldQuery();
$query
->entityCondition('entity_type', 'node', '=')
->propertyCondition('status', 1, '=')
->propertyCondition('created', '1294694496', '<');
$result = $query->execute();
ستبدو نتائج $ من هذا الاستعلام مشابهة لما يلي:
Array
(
[node] => Array
(
[1] => stdClass Object
(
[nid] => 1
[vid] => 49
[type] => article
)
[2] => stdClass Object
(
[nid] => 2
[vid] => 2
[type] => page
)
)
)
يمكنك بعد ذلك استخدام هذا الصفيف كمدخل node_load_multiple:
$nodes = node_load_multiple(array_keys($result['node']));
لقد وجدت مشكلة في Drupal حول إضافة أمثلة لـ EntityFieldQuery
. لقد استخدمته للحصول على أمثلة وكذلك للتعبير عن رأيي في المكالمة لمزيد من الأمثلة.
" هل نحتاج إلى مثال EntityFieldQuery؟ "
التعليق # 11 يوضح استخدام node_load_multiple()
كما هو موضح أدناه:
$query = new EntityFieldQuery();
$entities = $query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'event')
->propertyCondition('status', 1)
->fieldCondition('field_date', 'value', array('2011-03-01', '2011-03-31'), 'BETWEEN')
->fieldOrderBy('field_date', 'value', 'ASC')
->execute();
$nodes = entity_load('node', array_keys($entities['node']));
return node_view_multiple($nodes, 'teaser');
فيما يلي مثال من إحدى وحدات الاختبار:
يؤدي هذا إلى تحديد العقد التي يبدأ مجال جسمها بـ "A". انظر أيضًا EntityFieldQuery :: execute () حول كيفية استخدام النتيجة المرتجعة.
هناك العديد من حالات الاستخدام ، والمثال النموذجي هو الاستعلام عن الكيانات لقيمة حقل معينة مثل حقل النص كما هو موضح في المثال الأول.
الميزة هي أنه يعمل مهما كان تخزين_الموقع الذي تستخدمه. على سبيل المثال ، يمكنك الاحتفاظ بحقولك في MongoDB و EntityQuery ستظل تعمل في حين أن الاستعلام عن field_data_body لن يعمل يدويًا.
يمكنك استخدام EntityFieldQuery فئة للاستعلام عن قاعدة البيانات وجلب النتائج في شكل قائمة مشابهة node_load_multiple()
.
يمكن تحقيق ذلك من خلال إنشاء فئة وتطبيق الشروط وتنفيذ الاستعلام ، على سبيل المثال:
<?php
$query = new EntityFieldQuery();
$query
->entityCondition('entity_type', 'TYPE') // E.g. node, entityform, taxonomy_term
->entityCondition('bundle', 'BUNDLE')
->fieldCondition('field_foo', 'value', 'STRING')
->range(0,10);
$result = $query->execute();
?>
سيؤدي هذا إلى إنشاء الصفيف مثل:
array (
'TYPE' =>
array (
123 =>
stdClass::__set_state(array(
'nid' => '123', // Can be also tid when loading terms.
'key' => 'value',
)),
456 =>
stdClass::__set_state(array(
'nid' => '456',
'key' => 'value',
)),
),
)
لجلب المعرّف من مصفوفة النتائج ، يمكنك استخدام: current(current($result))->tid
.
فيما يلي مثال أكثر تقدمًا:
<?php
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'article')
->propertyCondition('status', NODE_PUBLISHED)
->fieldCondition('field_news_types', 'value', 'spotlight', '=')
->fieldCondition('field_photo', 'fid', 'NULL', '!=')
->fieldCondition('field_faculty_tag', 'tid', $value)
->fieldCondition('field_news_publishdate', 'value', $year . '%', 'like')
->fieldOrderBy('field_photo', 'fid', 'DESC')
->range(0, 10)
->addMetaData('account', user_load(1)); // Run the query as user 1.
$result = $query->execute();
if (isset($result['node'])) {
$news_items_nids = array_keys($result['node']);
$news_items = entity_load('node', $news_items_nids);
}
?>
انظر: كيفية استخدام EntityFieldQuery في Drupal.org لمزيد من التوضيح.