我正在为图书馆开发一个管理面板。我需要插入更多作者的书。我在我的控制器中插入书本插件/但我不明白我如何将作者i插入BooksController中的表“作者”,条件是我需要检查,表中有我的这样的作者,如果没有加上。 BooksController的Thath代码:
public function insert(Request $request)
{
$BookName = $request->input('bookname');
if(!empty($BookName)){
$NewBook = new Books;
$NewBook->name = $BookName;
$BookFile = $request->file('books_file');
if(!empty($BookFile)){
$NewBook->img = $BookFile->getClientOriginalName();
$BookFile->move( storage_path('images/books/'), $BookFile->getClientOriginalName());
}
$NewBook->save();
$AuthorsNames = $request->input('authors');
if(!empty($AuthorsNames)){
$AuthorsFiles = $request->file('authfiles');
}
return "Scs";
}else{
return 'Enter book title';
}
}
我阅读了有关必要功能的文档,但我不明白如何使用它们。在我的代码中,我接受了一系列作者,因为一本书可以有很多作者。我将非常感谢代码,但对于必要的功能以及如何使用它们的解释。
答案 0 :(得分:2)
Laravel文档详细介绍了这一点。
https://laravel.com/docs/5.5/eloquent-relationships#updating-many-to-many-relationships
附加/分离
Eloquent还提供了一些额外的辅助方法,使相关模型的使用更加方便。例如,让我们想象一个用户可以拥有多个角色,一个角色可以拥有许多用户。要通过在连接模型的中间表中插入记录来将角色附加到用户,请使用attach方法:
$user = App\User::find(1);
$user->roles()->attach($roleId);
将关系附加到模型时,您还可以传递要插入到中间表中的其他数据数组:
在您的示例中,作者应该已经存在,因为多对多的关系意味着您在books表中有一本书,authors表中的作者,以及在中间表中链接的两个主键(id)。
如果作者尚不存在,请保存作者并获取ID并使用attach将其ID添加到书中。 Book模型不应该关心作者姓名,只关心ID。
作者和书籍应该被认为是完全独立的,直到你链接它们为止。因此,应该单独创建一本书,并且应该单独创建一个作者,然后链接它们。换句话说,你真的不应该从BookController创建作者,但是如果你想创建一个像其他任何作者一样的作者模型,比如$author = Author::create($data)
,那么用{{1}来附加它。 }}
我在您的结构中看到的主要问题是您如何知道作者是否已经存在?两位不同的作者可以使用相同的名称。理想情况下,我建议将ID传递给BookController,而不是名称。
答案 1 :(得分:1)
基本上你需要在书桌旁边另外两张表,一张是作者表,你需要为你的作者创建一个模型类,你可以添加作者。和一个数据透视表authors_books,因为它是一个多对多的关系。
Author::create(['name' => $name,....]);
和
Schema::create('authors_books', function (Blueprint $table) {
$table->increments('id');
$table->integer('author_id')->unsigned();
$table->integer('book_id')->unsigned();
$table->foreign('author_id')->references('id')->on('authors')->onDelete('cascade');
$table->foreign('book_id')->references('id')->on('books')->onDelete('cascade');
$table->timestamps();
});
您可以添加到数据透视表:
DB::table('authors_books')->insert(
['author_id' => $author, 'book_id' => $book_id]
);