Laravel Eager在一对多关系中加载指定列的集合

时间:2016-12-17 07:16:55

标签: php laravel eloquent

可以在一个查询中执行这些操作吗?

$detail = Goods::find(1);
$detail->pictures = $detail->pictures()->lists('link');
// output
[
  'id' => 1,
  'name' => 'IPhone',
  'pictures' => [
    0 => 'http://whatever.com/1.jpg',
    1 => 'http://whatever.com/2.jpg',
   ],
]

我试过这个

Goods::with(['pictures' => function($query){
    $query->select('link');
}])->find($id);

没有预期的输出

2 个答案:

答案 0 :(得分:0)

您还需要选择外键。您可以使用toArray()将集合转换为数组:

Goods::with(['pictures' => function($query){
    $query->select('link', 'good_id');
}])->find($id)->toArray();

答案 1 :(得分:0)

根据您的上述查询,如果没有密钥,您如何知道哪个Good属于哪个Picture? Eloquent也不知道,所以它无法匹配相关的模型。

这就是你需要的:

$good = Goods::with(['pictures' => function($query){
           $query->select('id', 'good_id', 'link');
        }])
        ->find($id);

然后您可以将集合的pluck方法用作:

$good->pictures = $good->pictures->pluck('link');