принадлежит компании с обнуляемым иностранным - Laravel 5.8 - PullRequest
0 голосов
/ 05 июля 2019

в моем проекте Laravel я получаю такую ​​структуру базы данных:

Продукты

  • Id
  • Имя

Заказы

  • Идентификатор
  • Всего

Order_Product

  • Product_id (обнуляемый)
  • Order_Id
  • Подробности

В моей модели заказа я делаю принадлежащий ToMany ответный удар с продуктоммодель:

public function products() {
     return $this->belongsToMany(Product::class)->withPivot('Details');
}

Проблема в том, что я пытаюсь получить коллекцию продуктов для заказа

$order->products();

Я не получаю строки с нулевым значением product_id , любое решениепожалуйста ?Спасибо.

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Скорее всего, вы не получите "обнуляемые" продукты, потому что у вас есть отношение Заказать-> Продукты. Когда вы вызываете $ order-> products (), eloquent пытается получить все сущности Product , которые связаны с вашим Заказом через поле product_id . Таким образом, если поле пустое, вы не можете получить Product , потому что нет соединения. Одно из решений:

  1. создать другую сущность, например OrderLine (таблица Order_Product) ; добавить методы, такие как $ orderLine-> details () и отношение к Product , например, $ orderLine-> product ()
  2. добавить отношение к OrderLine внутри Order - $ order-> line () или $ order-> info () и т. Д. -> Order hasMany OrderLine
  3. затем используйте $ order-> line (), чтобы получить детали и продукты заказа (если есть)

p.s. Я скомпилировал его в моей голове, так что, возможно, понадобятся некоторые корректировки кода. Удачи

0 голосов
/ 05 июля 2019

Поддержка Laravel «Null Object Pattern» начиная с версии 5.5, которая позволяет вам определять модель по умолчанию, которая будет возвращена, если данное отношение равно нулю.

Попробуйте использовать следующий код:

public function products() {
     return $this->belongsToMany(Product::class)->withDefault()->withPivot('Details');
}
...