The*_*ude 1 mysql subquery filter laravel eloquent
我想让工作人员level等于"高级".我想将用户表与员工合并,因为它包含有关员工的常见信息,如姓名,电子邮件等.
目前我在Eloquent中使用它:
$results = User::with(array('staff' => function($query) {
$query->where('level', 'Senior');
}))->all();
Run Code Online (Sandbox Code Playgroud)
如果我运行这个我获得所有用户虽然级别不等于高级,但我可以在数组中看到人员对象是空的.
目前我做空检查以丢弃不匹配的记录.
反正有没有以更好的方式实现它,所以当我在子查询中过滤一些东西时,主查询将只返回匹配的结果数组,所以我不必再进行任何空检查.
with不会更改SELECT * FROM users查询.它运行另一个查询以获取相关模型:SELECT * FROM staff并应用于where此模型.
// this limits only related staff
$results = User::with(array('staff' => function($query){
$query->where('level', 'Senior');
}))->get();
// this limits only users (it does not load related staff at all)
$results = User::whereHas('staff', function($query){
$query->where('level', 'Senior');
})->get();
// and finally this will limit both users set and staff set
$results = User::with(array('staff' => function($query){
$query->where('level', 'Senior');
}))->whereHas('staff', function($query){
$query->where('level', 'Senior');
})->get();
Run Code Online (Sandbox Code Playgroud)
现在,如果要合并某些内容,请使用简单连接:
// I dont know what relation you have, so I assume User belongsTo Staff
User::join('staff', 'users.staff_id', '=', 'staff.id')
->where('staff.level', 'senior')
->get( array('users.*', 'staff.level', ...) ); // select fields you need
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3446 次 |
| 最近记录: |