#php #laravel #eloquent
#php #laravel #красноречивый
Вопрос:
в нашем веб-приложении у нас есть несколько вложенных категорий, с которыми они belongsToMany
posts
связаны, каждой записи можно назначить одну или несколько категорий, и теперь я хочу получить все записи от родительских до конца подкатегорий, которые назначены в это дерево
с помощью приведенного ниже кода я могу получить все эти категории в иерархическом виде, но я не могу сохранить все сообщения для возврата в качестве выходных данных:
$category = Category::whereId($request->category_id)->whereNull('category_id')->with('childrenCategories')->first();
$this->allCategories($category,$request);
/******************************************/
private function allCategories($category){
if($category->childrenCategories->first()){
foreach ($category->childrenCategories as $childCategory) {
...
$this->allCategories($childCategory);
}
}
}
мои модели:
class Category extends Model
{
protected $guarded = ['id'];
public function parentCategory()
{
return $this->belongsTo( Category::class, 'category_id', 'id' );
}
public function categories()
{
return $this->hasMany(Category::class);
}
public function posts()
{
return $this->belongsToMany(Post::class);
}
public function childrenCategories()
{
return $this->hasMany(Category::class)->with('categories');
}
}
class Post extends Model
{
use Sluggable, SoftDeletes;
protected $guarded = ['id'];
public function categories()
{
return $this->belongsToMany(Category::class);
}
}
Комментарии:
1. Вы ищете запрос рекурсивных отношений? github.com/staudenmeir/laravel-adjacency-list отлично подходит для этого. Это поможет вам получить нужное дерево.
2. @MaartenVeerman спасибо, что
belongsToMany
не поддерживаете3. Хорошо, в этом случае вам может потребоваться написать свой собственный рекурсивный CTE для обхода иерархии. Но вам также потребуется реализовать свою собственную логику eloquent.