How to Merge Two Eloquent Collections? Ask Question

How to Merge Two Eloquent Collections? Ask Question

質問テーブルとタグ テーブルがあります。特定の質問のタグからすべての質問を取得したいと考えています。たとえば、特定の質問に「旅行」、「電車」、「文化」というタグが付いているとします。これら 3 つのタグのすべての質問を取得できるようにしたいと考えています。問題は、質問とタグの関係が Eloquent で「belongsToMany」として定義されている多対多であることです。

質問コレクションを以下のようにマージしてみようと考えました。

foreach ($question->tags as $tag) {
    if (!isset($related)) {
        $related = $tag->questions;
    } else {
        $related->merge($tag->questions);
    }
}

しかし、うまくいかないようです。何もマージされていないようです。私はこれを正しく試みていますか? また、Eloquent で多対多の関係にある行の行を取得するより良い方法はあるでしょうか?

ベストアンサー1

mergeメソッドはマージされたコレクションを返しますが、元のコレクションは変更されません。そのため、次の操作を行う必要があります。

$original = new Collection(['foo']);

$latest = new Collection(['bar']);

$merged = $original->merge($latest); // Contains foo and bar.

例をコードに適用する

$related = new Collection();

foreach ($question->tags as $tag)
{
    $related = $related->merge($tag->questions);
}

おすすめ記事