拉拉维尔雄辩的一对一保存关系


laravel eloquent one-to-one save relation

在拉拉维尔迈出第一步,然后撞墙。

我有两个实体:

    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)