2017-05-10 17 views
2

私は2つのモデルがあります:Laravel Eloquentで複数の一対一関係を指定する方法は?

Deal 
- id 
- seller 
- buyer 
- price 
- date 

Person 
- id 
- name 
- balance 
- email 

DealモデルフィールドsellerbuyerPersonモデルインスタンスが含まれています。

Laravel雄弁で、このモデルを指定するための正しい方法は何ですか?


私はこのようにしています。データベース・スキーマ:

deals 
- id: int, primary 
- seller_id: int 
- buyer_id: int 
- price: decimal(10, 2) 
- date: datetime 

people 
- id: int, primary 
- name: string 
- balance: decima(10, 2) 
- email: string 

雄弁モデルの定義:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'buyer' in 'field list'... 

$seller = new Person(); 
$seller->name = 'Anna'; 
$seller->balance = 100500; 
$seller->email = '[email protected]'; 

$buyer = new Person(); 
$buyer->name = 'Bob'; 
$buyer->balance = 9000; 
$buyer->email = '[email protected]'; 

$deal = new Deal(); 
$deal->seller = $seller; 
$deal->buyer = $buyer; 
$deal->price = 99.99; 
$deal->date = new Carbon(); 

$deal->save(); 
が、私はエラーを取得する:

class Deal extends Model 
{ 
    public function seller() 
    { 
     return $this->belongsTo(Person::class, 'seller_id'); 
    } 

    public function buyer() 
    { 
     return $this->belongsTo(Person::class, 'buyer_id'); 
    } 
} 

class Person extends Model 
{ 
    // 
} 

しかし、私は新しいDealインスタンスを作成しようとすると、

間違っている?

答えて

1

$deal->sellerと言うと、そのように関係を定義したので、Peopleオブジェクトのインスタンスが返されます。しかし、貯蓄中、あなたはそれを行うことができます。これは

$seller = new Person(); 
$seller->name = 'Anna'; 
$seller->balance = 100500; 
$seller->email = '[email protected]'; 
$seller->save(); // important 

$buyer = new Person(); 
$buyer->name = 'Bob'; 
$buyer->balance = 9000; 
$buyer->email = '[email protected]'; 
$buyer->save(); // important 

$deal = new Deal(); 
$deal->seller_id = $seller->id; 
// or $deal->seller()->associate($seller); 
$deal->buyer_id = $buyer->id; 
// or $deal->buyer()->associate($buyer); 
$deal->price = 99.99; 
$deal->date = new Carbon(); 

$deal->save(); 
+0

ありがとうございます!親インスタンスの取得はこのように '$ seller = $ deal-> seller'の働きをするので、同じ方法で作業することを期待しました。 – Finesse

1

Belongs To Relationshipについてあなたはassociateメソッドを使用する必要があります試してみてください。

また、Personモデルを保存しておく必要があります。これにより、データベースに関連付ける有効なIDを持つようになります。

$seller = new Person(); 
$seller->name = 'Anna'; 
$seller->balance = 100500; 
$seller->email = '[email protected]'; 
$seller->save(); 

$buyer = new Person(); 
$buyer->name = 'Bob'; 
$buyer->balance = 9000; 
$buyer->email = '[email protected]'; 
$buyer->save(); 

$deal = new Deal(); 
$deal->seller()->associate($seller); 
$deal->buyer()->associate($buyer); 
$deal->price = 99.99; 
$deal->date = new Carbon(); 

$deal->save(); 
+0

ありがとう!親インスタンスの取得はこのように '$ seller = $ deal-> seller'の働きをするので、同じ方法で作業することを期待しました。 – Finesse

関連する問題