在拉拉维尔迈出第一步,然后撞墙。
我有两个实体:
Schema::create('company', function (Blueprint $table) {
$table->engine = "InnoDB";
$table->increments('id');
$table->string('name')->unique();
$table->integer('addressid')->unsigned()->nullable();
});
和
Schema::create('addresses', function (Blueprint $table) {
$table->engine = "InnoDB";
$table->increments('id');
$table->string('street');
(...)
});
Schema::table('company', function($table) {
$table->foreign('addressid')
->references('id')->on('addresses')
->onDelete('cascade');
});
型号是
class Address extends Model {
public function shipyard() {
return $this->belongsTo('App'Company', 'addressid');
}
}
class Company extends Model {
public function address() {
return $this->hasOne('App'Address', 'id', 'addressid');
}
}
当我想在数据库中创建这些实体时,我在HTML中使用一个表单来收集所有数据。然后我发布请求并执行以下操作:
Route::post('/company', function (Request $request) {
(...validation...)
$company = new Company();
$company->name = $request->name;
$address = new Address();
$address->street = $request->street;
(...)
$company->address()->save($address);
$company->save();
return redirect('/');
});
结果我在数据库中有两个实体,但"addressid"字段为空。为什么?
更改公司关系(您可以删除地址关系):
class Company extends Model {
public function address() {
return $this->belongsTo('App'Address', 'addressid');
} }
保存代码:
Route::post('/company', function (Request $request) {
(...validation...)
$company = new Company();
$company->name = $request->name;
$address = new Address();
$address->street = $request->street;
(...)
$address->save();
$company->address()->associate($address);
$company->save();
return redirect('/');
});
class Address extends Model {
// Added fillable array for mass assigment
protected $fillable = ['street'];
public function shipyard() {
return $this->belongsTo('App'Company', 'addressid');
}
}
class Company extends Model {
// Added fillable for mass assignment
protected $fillable = ['name','addressid'];
// The second argument for the hasOne takes a foreign key not a primary key
public function address() {
return $this->hasOne('App'Address', 'addressid');
}
}
$company = new Company();
$company->name = $request->name;
$company->save();
$company->address()->create($request->street)