![](/img/trans.png)
[英]How to add brackets to a Where Closure within a When Clause for Laravel Eloquent
[英]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.