4
我有以下结构:Laravel雄辩的关系 - 将数据插入到多个表
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>
我使用下面的控制器方法从表单POST数据和一切工作正常,但是当我提出2部电影与同类型,例如“行动/戏剧”,我得到2个独立的条目流派表所示:
ID:1 名称:动作/剧情
id:2 name:动作/戏剧
什么是反复使用一个特定流派类型的单个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');
}
输出表应该是这个样子:
注:我也有一个数据透视表这是连接电影与演员,以促进多对多的关系,但我没有把它包括在这里。
真棒酱!我已经将流派和演员的逻辑改为firstOrCreate。这是否意味着我可以使用firstOrNew方法创建新电影?这意味着如果电影已经存在于数据库中,它不应该重复? – Daybreak
正确,如果你不想重复电影名称,我会采取同样的方法。 – btl