Você pode usar o seguinte código.
$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();
As chamadas para SelectQuery :: join () ( SelectQuery :: da mesma forma como SelectQuery :: leftJoin () , SelectQuery :: innerJoin () e SelectQuery :: addJoin () ) não podem ser encadeadas em cadeia porque esses métodos não retornam um SelectQuery
objeto, mas o alias real usado para a associação. Se você executar o código a seguir, você receberá um erro.
$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();
Strings no PHP não são objetos e não definem o execute()
método.
Para verificar se o código está executando a consulta SQL correta, faça a conversão $query
para uma sequência e imprima-a. Você receberá a consulta SQL que seria executada no seu código.
$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;
Com esse código, recebo a seguinte saída.
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()
não retorna umSelectQuery
objeto. O código está chamandocondition()
por algo que não é um objeto.