У меня есть две модели, Delivery
а также Shipment
,
Deliveries
может иметь два различных отношения один к одному с Shipment
: OutboundShipment
а также InboundShipment
,
Вот как я определяю эти отношения:
class Delivery extends Model
{
public function outboundShipment() {
return $this->hasOne('App\Shipment', 'delivery_id', 'outbound_shipment_id');
}
public function inboundShipment() {
return $this->hasOne('App\Shipment', 'delivery_id', 'inbound_shipment_id');
}
public function addRelatedShipments() {
$newOutboundShipment = new Shipment();
$newOutboundShipment->status = 'Delivery Outbound';
$newOutboundShipment->save();
$this->outboundShipment()->save($newOutboundShipment);
$newInboundShipment = new Shipment();
$newInboundShipment->status = 'Inbound';
$newInboundShipment->save();
$this->inboundShipment()->save($newInboundShipment);
}
}
class Shipment extends Model
{
public function delivery() {
return $this->hasOne('App\Delivery');
}
}
После создания моего Delivery
объект и сохранение его, я называю addRelatedShipments()
,
С одной стороны, это работает нормально — если я позвоню $deliveries = Delivery::with('outboundShipment')->with('inboundShipment')->get();
Я получаю список поставок, и каждая доставка имеет outbound_shipment
а также inbound_shipment
как свойства на моделях.
Тем не менее, это не работает, когда я пытаюсь включить доставку на поставку. Если я позвоню $shipments = Shipment::with('delivery')->get();
Я получаю все отгрузки, и два поля равны нулю: delivery_id
а также delivery
,
Есть идеи, что я здесь делаю не так? Я бы предположил, что, по крайней мере, delivery_id
поле не должно быть нулевым Как уже упоминалось, я звоню save()
на Delivery
модель перед звонком addRelatedShipments()
,
Потому что ваш груз содержит delivery_id
он должен определить отношение к модели доставки как принадлежность. Обновите свое отношение, чтобы оно было таким:
class Shipment extends Model
{
public function delivery() {
return $this->belongsTo('App\Delivery');
}
}
Других решений пока нет …