Как вывести записи всех подкатегорий через сводную таблицу
Сейчас вывожу записи конкретной категории на которую перехожу, а вот как вывести записи всех подкатегорий? При этом использую сводную таблицу
Companies | Categories | Company_category
Подкатегории вывожу через parent_id
Сейчас код выглядит вот так:
$companies = Company::search(request('search'))->query(function(Builder $query) use($category){
$query->select(['id', 'name', 'company_type_id', 'logo'])
->when($category->exists, function(Builder $query) use($category){
$query->whereRelation(
'categories',
'categories.id',
'=',
$category->id
);
})
->sorted()
->companyByCity();
})->paginate(15);
Category Model
public function companies(): BelongsToMany
{
return $this->belongsToMany(Company::class, 'category_company');
}
public function categories(): HasMany
{
return $this->hasMany(Category::class);
}
public function childrenCategories(): HasMany
{
return $this->hasMany(Category::class)->with('categories');
}
public function parent(): belongsTo
{
return $this->belongsTo(Category::class, 'id');
}
Company Model
public function categories(): BelongsToMany
{
return $this->belongsToMany(Category::class, 'category_company');
}
Ответы (1 шт):
Автор решения: Raz Galstyan
→ Ссылка
Выше упамянут ответ. Там при момощи этого запроса можно вывести все подкатегории заданной категории.
При помощи этого запроса можно сделать так.
Сперва нам нужно взять все id
категорий которые нам нужны.
$categoryIds = DB::select("
with recursive cte (id, parent_id)
as (
select id,
parent_id
from categories
where id = $parentCategoryId
union all
select categories.id,
categories.parent_id
from users
inner join cte on categories.id = cte.parent_id
)
select * from cte;
")->pluck('id')->toArray();
После того как у нас уже есть все ид категорий которые нам нужны, уже можете по такому запросу извлеч все что в этих категориях.
$companies = Company::query()
->where('field_name', $search)->whereHas('categories',
function($query) use($categoryIds) {
$query->whereIn('category_id', $categoryIds)
})->get();