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

Php 如何使用Laravel使用1个表单插入多个表,php,laravel,crud,Php,Laravel,Crud,我有一个表单页面,用于存储特定艺术家的录制数据。大多数数据属于记录表,但有些数据应存储在相关表中。我现在主要关心的是类型表。在类型表中,我有Name列。我对提交表格后的理想流程的想法如下: 检查流派名称是否已存在 如果不是:存储名称并将其id用作fk 如果是:获取流派id并将其用作fk 我正在研究的是录制控制器中的存储方法。目前我正在与 录制表中的$recording\u date、$release\u date和$Lyps 免责声明: 我不会向你展示我尝试过的很多东西,因为我无法向你展示我尝试

我有一个表单页面,用于存储特定艺术家的录制数据。大多数数据属于记录表,但有些数据应存储在相关表中。我现在主要关心的是类型表。在类型表中,我有Name列。我对提交表格后的理想流程的想法如下:

  • 检查流派名称是否已存在
  • 如果不是:存储名称并将其id用作fk
  • 如果是:获取流派id并将其用作fk
  • 我正在研究的是录制控制器中的存储方法。目前我正在与 录制表中的$recording\u date、$release\u date和$Lyps

    免责声明: 我不会向你展示我尝试过的很多东西,因为我无法向你展示我尝试过的所有方法,这也是无用的,因为问题不是我不明白为什么它不起作用。我就是找不到任何方法来正确地使用包含相同约束和1对多关系的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->genre()->create('your data array here')
    
    你可以阅读更多关于它的内容

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

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

    请尝试此方法

    ....
    
    $genre->save();
    
    $genre->recordings()->create([
      "recording_date"=>$request->input('recording_date'),
      "release_date"=>$request->input('release_date'),
      "lyrics"=>$request->input('lyrics')
    ]);
    

    您从不调用
    $genre->save()
    ,因此
    $genre->id
    null
    ,并且
    $recording->genre\u id=$genre->id不起作用。另外,我认为你为你的
    录制
    迁移发布了错误的代码。@TimLewis哦,是的,我发布了错误的代码。我很抱歉。谢谢你指出这一点。我将尝试编辑它。
    //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 model
    class Recording extends Model
    {
        protected $guarded = [];
    
        public function genre() {
            return $this->belongsTo(Genre::class);
        }
    }
    
    //Genre model
    class Genre extends Model
    {
        protected $guarded = [];
    
        public function recordings() {
            return $this->hasMany(Recording::class);
        }
    }
    
    $recording->genre()->create('your data array here')
    
    $recording->genre()->exists()
    
    ....
    
    $genre->save();
    
    $genre->recordings()->create([
      "recording_date"=>$request->input('recording_date'),
      "release_date"=>$request->input('release_date'),
      "lyrics"=>$request->input('lyrics')
    ]);