回答:
次のコードを使用できます。
$query = db_select('digitaliq_flds_by_node', 'a')->fields('a');
$alias = $query->join('digitaliq_fld_category', 'b', 'a.fld_id = %alias.fld_id AND a.fld_collection_id = %alias.fld_collection_id AND a.fld_group_name = %alias.fld_group_name');
$terms = $query->execute();
通話SelectQuery ::参加() (のようなワイズSelectQuery :: leftJoin() 、SelectQuery :: innerJoin() 、およびSelectQuery :: addJoinは()これらのメソッドは戻りませんので)、鎖できないSelectQuery
オブジェクトを、ただし、結合に使用される実際のエイリアス。次のコードを実行すると、エラーが発生します。
$query = db_select('digitaliq_flds_by_node', 'a')
->fields('a')
->join('digitaliq_fld_category', 'b', 'a.fld_id = %alias.fld_id AND a.fld_collection_id = %alias.fld_collection_id AND a.fld_group_name = %alias.fld_group_name')
->execute();
PHPの文字列はオブジェクトではなく、execute()
メソッドを定義しません。
コードが正しいSQLクエリを実行していることを確認するには$query
、文字列にキャストして出力します。コードから実行されるSQLクエリを取得します。
$query = db_select('digitaliq_flds_by_node', 'a')->fields('a');
$alias = $query->join('digitaliq_fld_category', 'b', 'a.fld_id = %alias.fld_id AND a.fld_collection_id = %alias.fld_collection_id AND a.fld_group_name = %alias.fld_group_name');
print $query;
このコードを使用すると、次の出力が得られます。
SELECT a.*
FROM
{digitaliq_flds_by_node} a
INNER JOIN {digitaliq_fld_category} b ON a.fld_id = b.fld_id AND a.fld_collection_id = b.fld_collection_id AND a.fld_group_name = b.fld_group_name
これを試して
$query = db_select('digitaliq_flds_by_node', 'a');
$query->join('digitaliq_fld_category', 'b', 'a.fld_id = b.fld_id');
$query->condition('a.fld_collection_id', 'b.fld_collection_id' '=');
$query->condition('a.fld_group_name', 'b.fld_group_name', '=');
$query->fields('a');
$query->execute();
:)
leftJoin()
返しませんSelectQuery
。コードはcondition()
オブジェクトではない何かを求めています。