Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Laravel Eloquent中指定多个一对一关系?_Php_Database_Laravel_Eloquent - Fatal编程技术网

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

Php 如何在Laravel Eloquent中指定多个一对一关系?,php,database,laravel,eloquent,Php,Database,Laravel,Eloquent,我有两种型号: Deal - id - seller - buyer - price - date Person - id - name - balance - email Dealmodel字段seller和buyer包含Person模型实例 在Laravel Eloquent中指定此模型的正确方法是什么 我试着这样做。数据库架构: deals - id: int, primary - seller_id: int - buyer_id: int - price

我有两种型号:

Deal
 - id
 - seller
 - buyer
 - price
 - date

Person
 - id
 - name
 - balance
 - email
Deal
model字段
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
雄辩的模型定义:

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
{
    //
}
但当我尝试创建一个新的
交易
实例时:

$seller = new Person();
$seller->name = 'Anna';
$seller->balance = 100500;
$seller->email = 'anna@exampe.com';

$buyer = new Person();
$buyer->name = 'Bob';
$buyer->balance = 9000;
$buyer->email = 'bob@exampe.com';

$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 = 'anna@exampe.com';
$seller->save(); // important

$buyer = new Person();
$buyer->name = 'Bob';
$buyer->balance = 9000;
$buyer->email = 'bob@exampe.com';
$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();
例如,您应该使用
associate
方法

您还需要先保存
个人
模型,以便在数据库中有一个有效的ID

$seller = new Person();
$seller->name = 'Anna';
$seller->balance = 100500;
$seller->email = 'anna@exampe.com';
$seller->save();

$buyer = new Person();
$buyer->name = 'Bob';
$buyer->balance = 9000;
$buyer->email = 'bob@exampe.com';
$buyer->save();

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

$deal->save();

非常感谢。父实例检索是这样工作的
$seller=$deal->seller
,所以我希望关联也能以同样的方式工作。谢谢!父实例检索的工作方式是
$seller=$deal->seller
,因此我希望关联也能以同样的方式工作。