我有两个模型:
Deal
- id
- seller
- buyer
- price
- date
Person
- id
- name
- balance
- email
Deal
模型字段 seller
和 buyer
包含 Person
模型实例。
在 Laravel Eloquent 中指定此模型的正确方法是什么?
我尝试这样做。数据库架构:
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
Eloquent 模型定义:
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
实例时:
$seller = new Person();
$seller->name = 'Anna';
$seller->balance = 100500;
$seller->email = '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="61000f0f00210419000c11044f020e0c" rel="noreferrer noopener nofollow">[email protected]</a>';
$buyer = new Person();
$buyer->name = 'Bob';
$buyer->balance = 9000;
$buyer->email = '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f0929f92b09588919d8095de939f9d" rel="noreferrer noopener nofollow">[email protected]</a>';
$deal = new Deal();
$deal->seller = $seller;
$deal->buyer = $buyer;
$deal->price = 99.99;
$deal->date = new Carbon();
$deal->save();
我收到错误:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'buyer' in 'field list'...
我做错了什么?
最佳答案
当您说$deal->seller
时,它会返回一个People
对象的实例,因为您已经以这种方式定义了关系。但在节省的同时,您可以这样做。试试这个
$seller = new Person();
$seller->name = 'Anna';
$seller->balance = 100500;
$seller->email = '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d8b9b6b6b998bda0b9b5a8bdf6bbb7b5" rel="noreferrer noopener nofollow">[email protected]</a>';
$seller->save(); // important
$buyer = new Person();
$buyer->name = 'Bob';
$buyer->balance = 9000;
$buyer->email = '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d7b5b8b597b2afb6baa7b2f9b4b8ba" rel="noreferrer noopener nofollow">[email protected]</a>';
$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();
关于php - 如何在 Laravel Eloquent 中指定多个一对一关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43882768/