У меня есть проект, в котором таблица customers
ссылается на себя через parent_id
. Верхний клиент - это приложение, затем клиенты ниже - это прямые клиенты приложения, а клиенты ниже них - их клиенты.
Мои Customer
модельные отношения:
/**
* Client Parent
*
* @return \Illuminate\Database\Eloquent\Relations\belongsTo
*/
public function parent()
{
return $this->belongsTo(Customer::class, 'parent_id', 'id');
}
/**
* Client Children
*
* @return \Illuminate\Database\Eloquent\Relations\hasMany
*/
public function children()
{
return $this->hasMany(Customer::class, 'parent_id', 'id');
}
/**
* Client's All Children
*
* @return \Illuminate\Database\Eloquent\Relations\hasMany
*/
public function allChildren()
{
return $this->children()->with('children');
}
, в моем Controller
я получаю все дочерние элементы следующим образом:
// Get all children customers of the user's customer
$customerTree = $customer->allChildren;
$customerIdsInTree = $customerTree->pluck('id')->toArray();
$customerIdsInTree
содержит все id
для прямых потомков текущего клиента, но не их детей. Я могу видеть потомков как отношения, загруженные для каждого потомка, если я dd($customerTree)
.
Как мне вырвать все id
из дерева, когда клиенты второго уровня находятся в соответствующих отношениях прямого потомка клиента ?
Или иначе, как мне сгладить коллекцию, чтобы родительская и дочерняя строки находились в одной коллекции?