Привет, я новичок и немного пытаюсь понять, как запрашивать отношения.Я пытаюсь создать базовый успокоительный API в laravel, и у меня есть 3 модели
class Book extends Model
{
public function author()
{
return $this->belongsTo(Author::class);
}
public function categories()
{
return $this->belongsToMany('App\Category', 'category_book')
->withTimestamps();
}
}
class Author extends Model
{
public function books(){
return $this->hasMany(Book::class);
}
}
class Category extends Model
{
public function books()
{
return $this->belongsToMany('App\Book', 'category_book')
->withTimestamps();
}
}
Миграции таблиц:
Schema::create('books', function (Blueprint $table) {
$table->engine = "InnoDB";
$table->increments('id');
$table->string('ISBN', 32);
$table->string('title');
$table->integer('author_id')->unsigned();
$table->float('price')->default(0);
$table->timestamps();
});
Schema::create('authors', function (Blueprint $table) {
$table->engine = "InnoDB";
$table->bigIncrements('id');
$table->string('name');
$table->string('surname');
$table->timestamps();
});
Schema::create('categories', function (Blueprint $table) {
$table->engine = "InnoDB";
$table->bigIncrements('id');
$table->string('name');
$table->timestamps();
});
Schema::create('category_book', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer('category_id')->unsigned();
//$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
$table->integer('book_id')->unsigned();
//$table->foreign('book_id')->references('id')->on('books')->onDelete('cascade');
$table->timestamps();
});
книги - это главная таблица, и автор имеет отношение один ко многим скниг.Категория имеет много-много отношений с книгами, так как книга может быть в нескольких категориях.
В таблице книг есть поле author_id, чтобы связать его с таблицей авторов.Существует также сводная таблица category_books, которая содержит category_id и book_id для связи книг с категориями
Но как мне запросить книги, чтобы они возвращали только книги, основанные на имени авторов?
Я бытакже нравится делать то же самое, основываясь на названии категории?
У моего контроллера книг есть следующее, но я не уверен, как это сделать правильно
public function index(request $request, Author $author, Category $category)
{
$author = $request->author;
$books = Book::find()->author()->where('name', $author);
$books = Book::with(['categories'])->where('name', $category);
return response()->json($books, 200);
}