選択した3つのfcフィールドに参加したい:
私はこれを試します:
$nids = db_select('node', 'n');
$nids->join(array('field_data_field_show_block_carousel', 'field_data_field_poster_film', 'field_data_field_film_link',), 'fc', 'n.nid = fc.entity_id');
$nids->fields('fc', array('field_poster_film_fid','field_film_link_url',));
$nids->fields('n', array('nid', 'title', 'uid',))
->condition('n.type', 'vodeo_library')
->condition('fc.field_show_block_carousel_value', 1)
->execute(); // returns an indexed array
$result = $nids->execute()->fetchAllAssoc('nid');
しかし、受信したSQLエラー? plsは私が間違っていることを教えてくれますか?
各結合は、配列としてではなく、新しい行に記述してください。 Joins および public function SelectQuery :: join を参照してください。
したがって、次のように試してください。
$nids = db_select('node', 'n');
$nids->join('field_data_field_show_block_carousel', 'fc', 'n.nid = fc.entity_id');
$nids->join('field_data_field_poster_film', 'fp', 'n.nid = fp.entity_id');
$nids->join('field_data_field_film_link', 'fl', 'n.nid = fl.entity_id');
$nids->fields('fp', array('field_poster_film_fid'));
$nids->fields('fl', array('field_film_link_url'));
$nids->fields('n', array('nid', 'title', 'uid',))
->condition('n.type', 'vodeo_library')
->condition('fc.field_show_block_carousel_value', 1)
->execute(); // returns an indexed array
$result = $nids->execute()->fetchAllAssoc('nid');
モジュールが達成しようとしていることに応じて、デフォルトのDrupal関数を確認することもできます(1つのフィールドにのみ条件があります))。
次のようなレンダリングされたフィールド値を取得できます。
$node = node_load($nid);
$poster= field_get_items('node', $node, 'field_data_field_poster_film');
$output = field_view_value('node', $node, 'field_data_field_poster_film', $poster[0]);
少しオーバーヘッドが気にならない場合は、 EntityFieldQuery を試してみてください。すべてのフィールドが表示され、通常のSQLクエリよりも少し遅くなりますが、読み取りと変更がはるかに簡単です。
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'vodeo_library')
->propertyCondition('status', NODE_PUBLISHED)
->fieldCondition('field_show_block_carousel_value', 'value', 1, '=');
$result = $query->execute();
if (isset($result['node'])) {
$news_items_nids = array_keys($result['node']);
$news_items = entity_load('node', $news_items_nids);
}
次のクエリを使用してください。
注:$ nids-> fields( 'fc'、array( 'field_poster_film_fid'、 'field_film_link_url'));のテーブルエイリアスを変更します。それに応じて。
$nids = db_select('node', 'n');
$nids->join('field_data_field_show_block_carousel', 'fc', 'fc.entity_id = n.nid');
$nids->join('field_data_field_poster_film', 'ff', 'ff.entity_id = n.nid');
$nids->join('field_data_field_film_link', 'fl', 'fl.entity_id = n.nid');
$nids->fields('fc', array('field_poster_film_fid','field_film_link_url'));
$nids->fields('n', array('nid', 'title', 'uid'))
->condition('n.type', 'vodeo_library')
->condition('fc.field_show_block_carousel_value', 1, '=')
->execute(); // returns an indexed array
$result = $nids->execute()->fetchAllAssoc('nid');