2016-03-19 45 views
2

laravelの最初のステップがあり、壁にぶつかるだけです。laravel eloquent one-to-one save relation

は、私は2つのエンティティがいる:

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

モデルを、私は私が収集するために、HTML内の1つのフォームを使用してDBでこれらのエンティティを作成したい場合は

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に2つのエンティティを持っていますが、 "addressid"フィールドはnullです。どうして?会社で

答えて

0

変更関係(あなたが削除することができ、アドレスでの関係):

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('/'); 
}); 
+0

どうもありがとうございました。できます。 – bonzo

0
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) 
関連する問題