簡體   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