为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Laravel 使用 1 个表单插入多个表

如何使用 Laravel 使用 1 个表单插入多个表

PHP
胡子哥哥 2022-07-09 18:25:36
我有一个用于存储特定艺术家的记录数据的表单页面。大多数数据属于记录表,但有些数据应该存储在相关表中。我现在主要关心的是流派表。在流派表中,我有 Name 列。我对表单提交后的理想流程的想法是:检查流派名称是否已存在如果不是:存储名称并将其 id 用作 fk如果是:获取流派 id 并将其用作 fk我正在处理的是 Recording 控制器中的 store 方法。目前我正在使用录音表中的 $recording_date、$release_date 和 $lyrics。免责声明:我不会向您展示我尝试过的大部分内容,因为无法向您展示我尝试过的所有方式,而且它也是无用的,因为问题不在于我不明白为什么它不起作用。我根本找不到任何方法来正确使用包含相同约束和一对多关系的 Eloquent。大多数人会建议我以单独的形式进行。另外我知道我现在没有处理验证。无论如何,我可以找到适用于我的类似案例信息的任何想法或建议都会有所帮助。<!--Form snippet--><div class="form-group">    <div class="input-group">        <input type="text" name="genre" class="form-control" placeholder="Genre" autocomplete="off">    </div></div>以下是我尝试过的最新代码。它不起作用的明显原因是它不处理外键。//Recording controllerpublic function store(Request $request)    {        $genre = new Genre();        $genre->name = $request->input('genre');        $recording = new Recording();        $recording->genre_id = $genre->id;        $recording->recording_date = $request->input('recording_date');        $recording->release_date = $request->input('release_date');        $recording->lyrics = $request->input('lyrics');        $recording->save();    }//Recording tablepublic function up()    public function up()    {        Schema::create('recordings', function (Blueprint $table) {            $table->bigIncrements('id');            $table->unsignedInteger('genre_id')->nullable();            $table->string('recording_date')->nullable();            $table->string('release_date')->nullable();            $table->text('lyrics')->nullable();            $table->timestamps();        });    }//Genres table public function up()    {        Schema::create('genres', function (Blueprint $table) {            $table->bigIncrements('id');            $table->string('name')->unique()->nullable();            $table->string('subgenre')->nullable();            $table->timestamps();        });    }//Recording modelclass Recording extends Model{    protected $guarded = [];    public function genre() {        return $this->belongsTo(Genre::class);    }}
查看完整描述

2 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

为了保存到关系表中,您必须执行以下操作:

$recording->genre()->create('your data array here')

你可以在这里阅读更多关于它的信息。

现在,如果您想检查 $recording 是否具有类型,您可以首先使用 exists() ,例如:

$recording->genre()->exists()

另一种选择是使用方法 firstOrCreate、firstOrNew,您可以在此处阅读有关它们的更多信息。


查看完整回答
反对 回复 2022-07-09
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

请试试这个


....


$genre->save();


$genre->recordings()->create([

  "recording_date"=>$request->input('recording_date'),

  "release_date"=>$request->input('release_date'),

  "lyrics"=>$request->input('lyrics')

]);


查看完整回答
反对 回复 2022-07-09
  • 2 回答
  • 0 关注
  • 141 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信