Как получить вложенные категории по имени родительской категории?
Есть такая таблица категорий:
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('alias')->nullable();
$table->unsignedBigInteger('parent_id')->nullable();
$table->string('description')->nullable();
$table->boolean('status')->default(true);
$table->timestamps();
$table->foreign('parent_id')->references('id')->on('categories')
->onDelete('cascade')
->onUpdate('cascade');
});
Нужно получить все вложенные категории, для которых известно имя родительской категории.
Запрос может быть примерно такой:
SELECT * FROM categories c1
where exists(
select * from categories c2
where c1.parent_id=c2.id
and c2.name='Category1'
)
должно быть примерно как-то так:
use App\Models\Category;
$categories = Category::whereHas('parent_id',function($query){
$query->whereIn('name', 'Category1');
})->get();
пытался сделать так:
class Category extends Model {
public function parent() {
return $this->belongsTo('Category','parent_id','id');
}
}
//controller
$categories = Category::whereHas('parent',function($query){
$query->whereIn('name', 'Category1');
})->get();
но выдаёт ошибку: Class 'Category' not found
хотя эта команда возвращает все категории без ошибок:
$categories = Category::get();
Подскажите, как это правильно сделать?