与扩展模型之间断断续续的口才关系

时间:2019-09-20 14:53:27

标签: laravel laravel-5

我通过表getUser有一个Asset的模型documents() { $this->hasMany(Document::class); }。我将data_asset_document扩展为多个模型,其中一个是Asset。在我的设备播种机中,我尝试创建绑定到设备记录的文档:

Equipment

口才产生此查询:

$asset = Equipment::create([...]);

$document = Document::create([
    'name' => "$type Purchase Order",
    'tracking_number' => app('incrementer')->current()
]);

$asset->documents()->save($document);

这显然是不正确的,因为update `data_document` set `equipment_id` = 1, `data_document`.`updated_at` = 2019-09-20 14:39:48 where `id` = 1 没有data_document列(除“资产”外,文档“属于”多个模型)。如何重写Asset :: documents,以便即使在扩展名中也能生成正确的映射?还是我需要通过Asset :: documents以外的其他方式保存我的文档?

1 个答案:

答案 0 :(得分:0)

由于您的扩展资产模型称为Equipment,因此Laravel希望您的外键称为equipment_id。您需要在关系中指定asset_id的实际外键。

https://laravel.com/docs/6.x/eloquent-relationships#one-to-many

有很多

documents() { 
    $this->hasMany(Document::class, 'asset_id'); 
}

问题是,我不确定您的关系确实是hasMany,因为您提到了其中涉及数据透视表data_asset_document的情况。如标题中所述,多对多关系将使用belongsToMany方法。

https://laravel.com/docs/6.x/eloquent-relationships#many-to-many

https://laravel.com/docs/6.x/eloquent-relationships#has-many-through