Сломанные красноречивые отношения с расширенной моделью - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть модель 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);

Eloquent создает такой запрос:

update `data_document` set `equipment_id` = 1, `data_document`.`updated_at` = 2019-09-20 14:39:48 where `id` = 1

Это, очевидно, неверно, поскольку data_documentне имеет столбца equipment_id (Документы "принадлежат" нескольким моделям помимо Актива).Как переписать Asset :: documents, чтобы получить правильное сопоставление даже в его расширениях?Или мне нужно сохранить мой документ с помощью средства, отличного от Asset :: documents?

1 Ответ

0 голосов
/ 20 сентября 2019

Поскольку ваша расширенная модель активов называется Equipment, Laravel ожидает, что ваш внешний ключ будет называться equipment_id.Вам нужно будет указать фактический внешний ключ asset_id в ваших отношениях.

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

hasMany

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...