我通过表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以外的其他方式保存我的文档?
答案 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