繁体   English   中英

laravel雄辩的一对一保存关系

[英]laravel eloquent one-to-one save relation

在laravel中迈出了第一步,然后撞上了墙。

我有两个实体:

    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');
    }
}

当我想在DB中创建这些实体时,我在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('/');
});

因此,我在DB中有两个实体,但“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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM