簡體   English   中英

Laravel Eloquent Relationship - 將數據插入多個表格

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM