提问者:小点点

Laravel获取按关系表排序的集合


我有2张桌子,一张是杂志,另一张是杂志。我把他们的关系设置成这样:

弹匣型号:

 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循环中的集合中?


共2个答案

匿名用户

有几种方法可以做到这一点。

可以通过执行以下操作将数组转换为集合。

$issuesCollection = collect($issues);
$imagesCollection = collect($images);

您还可以初始化空集合,然后使用ush()方法向其追加项。检查留档

匿名用户

只需使用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方法遍历集合并将每个值传递给给定的回调。回调可以自由修改并返回该项,从而形成一个新的修改项集合