php - 如何在 Laravel Eloquent 中指定多个一对一关系?

标签 php database laravel eloquent

我有两个模型:

Deal
 - id
 - seller
 - buyer
 - price
 - date

Person
 - id
 - name
 - balance
 - email

Deal 模型字段 sellerbuyer 包含 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/

相关文章:

javascript - 使用ajax(DataTable jQuery)的参数调用php函数

php - 拉拉维尔背包。 1-1(一对一)关系

database - 在数据库中存储加密的用户名哈希

sql - 删除 PostgreSQL 中索引的唯一性

php - Laravel:当输入是数组时使用验证器的 sometimes 方法

laravel - "Not"验证规则中的运算符

php - 如何检查值是否存在于 MySQL 数据库中

php - 如何防止移动设备在我的网站上自动下载 PDF?

Mysql查询获取计数结果并分组依据

laravel - 如何通过 Storage Facade(在 Laravel 5 中)获取下载文件的进度条?