Почему мои отношения Laravel один к одному не работают, как ожидалось?

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

0

Решение

Потому что ваш груз содержит delivery_id он должен определить отношение к модели доставки как принадлежность. Обновите свое отношение, чтобы оно было таким:

class Shipment extends Model
{
public function delivery() {
return $this->belongsTo('App\Delivery');
}

}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]