没有JOIN的雄辩的同事

时间:2016-10-18 18:54:38

标签: laravel laravel-5 eloquent

如何使用join进行多个表的查询?就像在这个例子中一样:

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)

此查询将返回表"分类"中的两个字段,但是来自另一个表的条件。到目前为止,我所说的最接近的是:

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

此查询返回

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

如果我删除了选择行

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

查询返回一个集合,因此关系正常。

在总结中,我正在寻找一种方法来改变由雄辩创建的查询

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

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'

1 个答案:

答案 0 :(得分:1)

如果你能在问题中展示你雄辩的模特,那么这两个表之间的关系并不清楚,我们能够帮助你。

但总的来说,你可以这样做:

    $categorias = AulaCategorias::with(['categoria' => function($query){
       $query->select('id_categoria', 'titulo' )
}])->whereIn('id_aula', array(1,2,3,4))->get();

如果这没有帮助,请在模型中添加两​​个表格之间的关系。