Laravel-获取具有关系的数组

时间:2020-08-23 19:42:04

标签: laravel

我有一个ajax调用,它返回一个数组:

$reports = Report::where('submission_id', $submissionID)
    ->where('status', 'pending')
    ->get(['description','rule']);
    
return [
    'message' => 'Success.',
    'reports' => $reports,
];  

从这个数组中,我只想返回字段'description'和'rule'。但是,我也想从owner()模型返回Report关系。我该怎么办?我是否必须加载关系并进行某种数组推送,还是有一个更优雅的解决方案?

3 个答案:

答案 0 :(得分:0)

您可以使用with()来寻求与负载相关的模型

$reports = Report::with('owner')
    ->where('submission_id', $submissionID)
    ->where('status', 'pending')
    ->get(['id','description','rule']);

请注意,您需要将id中的get()包括在报表模型中,以映射(所有者)相关模型

答案 1 :(得分:0)

您可能会与 Reports owners 表(如下所示)建立一对多关系

报告模型

public function owner() {
  return $this->belongsTo('App\Owner');
}

所有者模型

public function reports() {
  return $this->hasMany('App\Report');
}

您的控制器代码

$reports = Report::with('owner')->
where('submission_id', $submissionID)->where('status', 'pending')->get()

return [
'message' => 'Success.',
'reports' => $reports,

];

答案 2 :(得分:0)

这就是我最终要去的事情:

        $reports = Report::
            with(['owner' => function($q)
            {
                $q->select('username', 'id');
            }])         
            ->where('submission_id', $submissionID)
            ->where('status', 'pending')
            ->select('description', 'rule','created_by')
            ->get();

其他答案是正确的,我需要加载用户ID。但是我必须使用一个函数才能工作。