繁体   English   中英

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

[英]How to add a where clause when using “with” on an Eloquent query in Laravel

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

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

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

您可以实现两个表的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.*');

使用with访问关系时,可以使用Closure 检查下面的代码以获取更多详细信息:

    return \App\Project::with(["projectLeaders" => function($query){
            $query->where('Lastname', 'Smith') //check lastname
        }])->join('companies', 'company_id', '=', 'companies.id')
                            ->join('project_status', 'project_status.id', '=', 'projects.status_id')
                            ->select('companies.*', 'project_status.name AS statusName', 'projects.*');

您可以在查询生成器实例上使用where方法将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()返回结果;

这么晚才回复很抱歉

查询您写的是正确的

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

方法一

因此,将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);

希望能帮助到你

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM