web-dev-qa-db-fra.com

Laravel aplatir et arracher d'une collection multidimensionnelle

Je dois récupérer juste un tableau de id de la collection donnée, quelque chose comme [10,54,61,21, etc]. J'ai essayé aplatir , pluck , mais rien ne semble fonctionner séparément d'un foreach qui est quelque chose que je voudrais supprimer à cette étape.

// 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();

Comme prévu, cela fonctionne bien. Voici un résultat:

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

Comment puis-je effectuer un pluck ('id') de cette collection afin d'obtenir [10,54,61,21]?

4
Vixed

Voici un algorithme récursif que vous pouvez ajouter à votre modèle Children:

use Illuminate\Support\Collection;

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