我有一个用于存储特定艺术家的记录数据的表单页面。大多数数据属于记录表,但有些数据应该存储在相关表中。我现在主要关心的是流派表。在流派表中,我有 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 controller
public 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 table
public 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 model
class Recording extends Model
{
protected $guarded = [];
public function genre() {
return $this->belongsTo(Genre::class);
}
}
一只名叫tom的猫
牛魔王的故事