web-dev-qa-db-ja.com

Laravel多次元コレクションから平坦化して取り出す

[10,54,61,21、etc]のように、指定したコレクションからidの配列のみを取得する必要があります。 flatten pluck を試しましたが、 foreach 以外は何も機能しないようですこれは、このステップで削除したいものです。

// Model
class Children extends Eloquent {
    public function directChildrens(){
        return $this->hasMany('App\Children','father_id','id')->select('id','father_id');
    }

    public function childrens(){
        return $this->directChildrens()->with('childrens');
    }
}

// Controller
return $children->childrens()->get();

予想通り、正常に動作します。ここに結果:

[{
"id": 10,
"father_id": 2,
"childrens": [
    {
        "id": 54,
        "father_id": 10,
        "childrens": [
            {
                "id": 61,
                "father_id": 54,
                "childrens": []
            }
        ]
    },
    {
        "id": 21,
        "father_id": 10,
        "childrens": []
    }
]
}]

[10,54,61,21]を取得するために、このコレクションの pluck( 'id')を実行するにはどうすればよいですか?

4
Vixed

Childrenモデルに追加できる再帰アルゴリズムは次のとおりです。

use Illuminate\Support\Collection;

public function getAllChildrenIds()
{
    return Collection::make([$this->getKey()])
        ->merge(
            $this->childrens->map->getAllChildrenIds()
        );
}
0
Shizzen83