将stream_id保存为垃圾表中的外键的最佳方法是什么? 我已经在表格中创建了表格。
迁移:
public function up()
{
Schema::table('junk', function(Blueprint $table)
{
$table->integer('stream_id')->after('id')->unsigned();
});
}
控制器功能:
public function create(Request $request)
{
// create junk, junk shall contain the stream id as a foreign key (save in database)
$junk = new Junk();
// stream information data -> the data is saved correctly here
$data = $request->all();
$stream = new Stream();
$stream->fill($data);
if($stream->save())
{
return redirect()->route('stream.new')->with('success', 'saved.');
}
else
{
return redirect()->route('stream.new')->with('error', 'not saved.')->withInput();
}
}
我的垃圾模型:
public function junk()
{
return $this->belongsTo('Stream', 'junk_id');
}
我的流模型
public function stream()
{
return $this->belongsTo('Junk', 'stream_id');
}
答案 0 :(得分:1)
你想使用外键约束吗?如果是这样,您可以采用这种方法。以下是具有坐标外键的位置表的示例:
public function up()
{
Schema::enableForeignKeyConstraints();
Schema::create('location', function (Blueprint $table) {
$table->engine = 'InnoDB';
$table->uuid('id');
$table->primary('id');
$table->uuid('coordinate_id')->nullable();
$table->string('address')->nullable();
$table->string('city')->nullable();
$table->string('state')->nullable();
$table->string('zipcode')->nullable();
$table->timestamps();
});
Schema::table('location', function(Blueprint $table){
$table->foreign('coordinate_id')->references('id')->on('coordinate');
});
}
没有参考坐标表上的位置。
你不应该分配$ data = $ request-> all();你应该使用Validator类来保护自己免受质量分配问题的影响。
看到你的垃圾级别也很高兴。
答案 1 :(得分:0)
如果你有关联模型的功能,你可以这样做:
$junk = new Junk();
$junk->stream()->associate($request->all());
在关系中:
associate()
方法attach()
方法有关Laravel(Eloquent ORM)中关系的更多信息
https://laravel.com/docs/5.4/eloquent-relationships#inserting-and-updating-related-models