[英]Laravel Eloquent Relationship - Inserting data into multiple tables
我有以下結構:
3桌:電影,演員,流派
電影表架構:
Schema::create('movies', function (Blueprint $t) {
$t->increments('id');
$t->string('title');
$t->integer('genre_id')->unsigned();
$t->foreign('genre_id')->references('id')->on('genres');
$t->string('genre');
$t->timestamps();
});
類型表架構:
Schema::create('genres', function (Blueprint $t) {
$t->increments('id');
$t->string('name');
$t->timestamps();
});
演員表架構:
Schema::create('actors', function (Blueprint $t) {
$t->increments('id');
$t->string('name');
$t->timestamps();
});
電影模態:
public function genre()
{
return $this->belongsTo('App\Genre');
}
public function actor()
{
return $this->belongsToMany('App\Actor');
}
類型莫代爾:
public function movie()
{
return $this->hasMany('App\Movie');
}
演員莫代爾:
public function movie()
{
return $this->belongsToMany('App\Movie');
}
形成:
<form method="post" action="{{ route('movies.insert') }}">
<input type="text" name="movieName" id="movieName">
<input type="text" name="actorName" id="actorName">
<input type="text" name="genre" id="genre">
<button type="submit">Add</button>
</form>
我使用以下控制器方法從表單發布數據,一切正常,但當我提交2個具有相同類型的電影,例如“動作/戲劇”時,我在流派表中得到2個單獨的條目,如:
id:1 name:Action / Drama
id:2 name:Action / Drama
對於特定類型類型反復使用單個ID的最佳方法是什么? 例如,如果我添加10個流派類型為“動作/劇情”的電影,那么“電影”表中的“genre_id”外鍵應該只顯示一個特定的id,它與流派表的“動作/戲劇”ID相對應。 希望有道理:/
控制器方法:
public function addMovies(Request $request)
{
$genre = new Genre;
$genre->name = $request->input('genre');
$genre->save();
$movie = new Movie;
$movie->title = $request->input('movieName');
$movie->genre = $request->input('genre');
$movie->genre()->associate($genre);
$movie->save();
$actor = new Actor;
$actor->name = $request->input('actorName');
$actor->save();
$actor->movie()->save($movie);
return redirect()->route('movies.search');
}
輸出表應如下所示:
注意:我還有一個數據透視表,它將電影與演員連接以促進多對多關系,但我沒有將它包括在這里。
那么你每次明確地保存一個新的類型,這就是為什么你得到重復。 你想做的就是這樣
$genre = Genre::firstOrCreate("name", $request->input('genre'));
然后你將電影分配到流派
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.