mardi 18 octobre 2016

Eloquent associate without JOIN

How can I make a query for multiple tables witout using join? Like in this example:

select c.id_categoria, c.titulo
from categorias c, aulas_categorias ac
where c.disciplina='N' and c.id_categoria=ac.id_categoria and ac.id_aula in (1,2,3,4)

This query will return two fields from table "categorias", but with a condition from another table. So far the closest that I got in eloquent was:

$categorias = AulaCategorias
            ::with('categoria')
            ->select('categorias.id_categoria', 'categorias.titulo')
            ->whereIn('aulas_categorias.id_aula', array(1,2,3,4))
            ->get();

And this query returns

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'categorias.id_categoria' in 'field list'
in PDOConnection.php line 77
at PDO->prepare('select `categorias`.`id_categoria`, `categorias`.`titulo` from `aulas_categorias` where `aulas_categorias`.`id_aula` in (?, ?, ?, ?)', array()) in PDOConnection.php line 77

If I remove the select line

->select('categorias.id_categoria', 'categorias.titulo')

the query returns a collection, so the relations are ok.

In summarizing, I'm looking for a way to turn the query that eloquent creates from

select `categorias`.`id_categoria`, `categorias`.`titulo` 
from `aulas_categorias` 
where `aulas_categorias`.`id_aula` in (?, ?, ?, ?)

to

select `categorias`.`id_categoria`, `categorias`.`titulo` 
from `aulas_categorias`, `categorias`
where `aulas_categorias`.`id_aula` in (?, ?, ?, ?) 
and 'categorias'.'id_categorias'='aulas_categorias'.'id_categorias'
and 'categorias'.'disciplina'='N'



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire