在Laravel中对雄辩的查询使用“ with”时如何添加where子句

时间:2019-02-02 02:15:02

标签: php laravel

我建立了一个查询,其中使用“ with”来包含相关模型。但是,我不确定如何在where子句中过滤那些相关模型。

0.9933992677987827

请注意查询中的with(“ projectLeaders”)。因此,ProjectLeaders是一个带来Employee类对象的关系,如何在该查询中过滤属性“姓氏”类似于“ Smith”的那些“ Employees”?

4 个答案:

答案 0 :(得分:1)

您可以实现两个表的where类。请检查以下代码和注释。

return \App\Proyecto::with(["projectLeaders" => function($query){
  $query->where() //if condition with inner table.
}])->join('empresas', 'id_empresa', '=', 'empresas.id')
                        ->join('tipo_estado_proyecto', 'tipo_estado_proyecto.id', '=', 'proyectos.id_tipo_estado_proyecto')
  ->where() //if condition with main table column.
                        ->select('empresas.*', 'tipo_estado_proyecto.nombre AS nombreEstadoProyecto', 'proyectos.*');

答案 1 :(得分:1)

使用rake db:drop rake db:create rake db:migrate 访问关系时,可以使用Closure。检查下面的代码以获取更多详细信息:

with

答案 2 :(得分:0)

您可以在查询构建器实例上使用where方法向查询中添加where子句。到最基本的通话需要三个参数。第一个参数是列名。第二个参数是一个操作符,它可以是任何数据库支持的运营商。最后,第三个参数是要对该列求值的值。

    return \App\Project::with("projectLeaders")->join('companies', 'company_id', '=', 'companies.id')
                            ->join('project_status', 'project_status.id', '=', 'projects.status_id')
                            ->where('lastname','=','Smith')
                            ->select('companies.*', 'project_status.name AS statusName', 'projects.*');

别忘了用get()返回结果;

答案 3 :(得分:0)

对不起,我晚答复

查询您的书写是否正确

但是在构建查询后,您需要从数据库中获取数据

方法一

因此向您的查询添加get()方法

return App\Project::with('projectLeaders')
                    ->leftJoin('companies', 'company_id', '=', 'companies.id')
                    ->leftJoin('project_status', 'project_status.id', '=', 'projects.status_id')
                    ->select('companies.*', 'project_status.name AS statusName', 'projects.*')
                    ->get();

方法二(带有分页)

return App\Project::with('projectLeaders')
                    ->leftJoin('companies', 'company_id', '=', 'companies.id')
                    ->leftJoin('project_status', 'project_status.id', '=', 'projects.status_id')
                    ->select('companies.*', 'project_status.name AS statusName', 'projects.*')
                    ->paginate(3);

希望有帮助