Вы можете использовать следующий код.
$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 :: join () (аналогично 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
leftJoin()
не возвращаетSelectQuery
объект. Код вызываетcondition()
что-то, что не является объектом.