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