Laravel范围与联接查询

时间:2019-10-04 14:42:59

标签: laravel eloquent

我想做的是使这个连接成为作用域函数

$workorders =\DB::table('users')->leftjoin('work_orders','users.id','=','work_orders.user_id')->select('users.id','users.name','users.email','users.status','work_orders.cod','work_orders.deadline'->where('users.id','=','1');    
$workorders = $workorders->get();

这是我尝试的没有成功的方法...

public function scopeOrders($query){
        return $query->join('work_orders','users.id','=','work_orders.user_id')
        ->select('users.id','users.name','users.email','users.status','work_orders.cod','work_orders.deadline')
        ->where('users.id','=','1');
    }

使用查询范围的预期结果

$usersWO = User::Orders()->get();

1 个答案:

答案 0 :(得分:1)

$workorders = $workorders->get();$usersWO = User::Orders()->get();之间的唯一区别是输出格式。它们都没有错误。

前者上的dd()输出带有记录值作为属性的stdClass对象的集合。:

enter image description here

后者上的dd()输出模型集合:

enter image description here

要修改第二个输出的外观使其与第一个看上去完全相同,您必须修改客户端代码,因为范围会返回模型的集合。

$usersWO = User::Orders()->get()->map(function ($user) {
    return (object) $user->getAttributes();
});