当前位置: 首页 > 知识库问答 >
问题:

Laravel雄辩的关系-将数据插入多个表

宋经业
2023-03-14

我的结构如下:

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名称:动作/戏剧

ID: 2名称:动作/戏剧

对于一个特定的流派类型,反复使用单个id的最佳方法是什么?例如,如果我添加了10部类型为“动作/戏剧”的电影,则“电影”表中的“流派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');
}

输出表应如下所示:

注意:我还有一个透视表,它将电影和演员联系起来,以促进多对多的关系,但我没有在这里包含它。

共有1个答案

彭阳朔
2023-03-14

你每次都在明确地保存一个新的流派,这就是为什么你会得到重复的。你想做的是

$genre = Genre::firstOrCreate("name", $request->input('genre'));

然后你会把电影归类为一种类型

 类似资料:
  • 我有三张桌子: 每当我尝试添加时,我试图获得一个帖子,它会自动添加一个,其中包含,表以及,同时,一旦创建了,它还应该记录和,但我使用多对多关系和结束了这个错误。如何使用eloquent添加和? 这就是我迄今为止所尝试的。 控制器。php 使用者php UserACcount.php Verification.php 账户php 我尝试使用这个功能,完全可以正常工作,但我很确定这就是它如何与雄辩。

  • 如何使用laravel雄辩的ORM关系在多个表中发出一个插入请求。即 表1:用户 id 姓名 电子邮件 表2:员额 id 表3:图像 id 用户id 邮政id 图像名称 关系 表id引用了其他两个表中的 表与

  • 我刚刚开始学习LaravelV3,我试图通过创建一个博客来了解eloquent的一对多关系。我的帖子与类别有多对一的关系(每个帖子都链接到一个类别)。 我有以下表格和以下字段: 帖子:id、标题、正文、创建日期、类别id 类别:id、名称 我有以下两种型号: 我想出了如何通过传递类别id来获得所有帖子: 我只是需要帮助,找出如何获得所有的职位,并得到他们的更正类别。因此,在视图中的一天结束时,我可

  • 我有帖子表和评论表。我想得到所有的帖子与它的评论和以下返回只是帖子有评论: 更新 例如 ID帖 1个职位1 2后2 id post\u id评论 1萨姆勒大学评论 Post::with('comments')只返回有注释的帖子,它只返回第一篇帖子,因为第二篇帖子没有注释,我想获取所有帖子(有注释或没有注释)

  • 我有以下三个表格: 所以基本上这种关系就像: 用户有许多项目 项目属性到客户端 我的问题是: 如何使用eloquent获得用户的所有客户端? 似乎我不能用户hasManyPass方法,因为在客户端表中没有project_id。 因此,我希望达到的目标是:

  • 我是Laravel5.2的新手,正在开发一个遗留系统,对雄辩有点困惑,希望有人能给我代码。 共有3个表格: 卡片类别卡片2类 卡片可以是许多类别的一部分,这些类别保存在cards2cat表中。 cards2cat表的结构如下 id(主键)图像(卡)类别 我想做的是在Cards模型中有一个方法,名为getCardsWithCategors,它返回Cards信息和category表中类别的名称。 ca