我有两张桌子,一张是杂志,另一张是问题。我已经建立了这样的关系:
杂志模特:
public function issues()
{
return $this->hasMany('App\Issue')->orderBy('date', 'desc');
}
问题模型:
public function magazine()
{
return $this->belongsTo('App\Magazine');
}
我有一个查询,我从列中订购杂志,然后在foreach循环中我得到每个杂志的第一期并将其存储在数组中:
$magazines = Magazine::with('issues')->orderBy('order')->get();
foreach ($magazines as $magazine)
{
$issues[] = $magazine->issues()->first();
$images[] = $magazine->issues()->first()->image;
}
但是,我想创建一个集合而不是数组。我不知道如何进行这种查询,或者是否有办法以某种方式将值存储到foreach循环中的集合中?
答案 0 :(得分:1)
有几种方法可以做到这一点。
您可以通过执行以下操作将数组转换为集合。
$issuesCollection = collect($issues);
$imagesCollection = collect($images);
您还可以初始化一个空集合,然后使用push()
方法向其追加项目。查看documentation
答案 1 :(得分:0)
只需使用map
功能:
$magazines = Magazine::with('issues')->orderBy('order')->get();
$firstIssues = $magazines->map(function($magazine) {
return $magazine->issues->first();
});
$images = $firstIssues->map(function($issue) {
return $issue->image;
});
map方法遍历集合并传递每个值 到给定的回调。回调可以自由修改项目和 返回它,从而形成一个新的修改项目集合