2016-04-14 8 views
0

私はDeliveryShipmentという2つのモデルを持っています。 OutboundShipmentInboundShipmentLaravelの一対一の関係が期待どおりに機能しないのはなぜですか?

DeliveriesShipmentを持つ2つの別々の一対一の関係を持つことができます。私はaddRelatedShipments()呼んで、私のDeliveryオブジェクトを作成し、それを保存した後

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'); 
    } 

} 

:ここ

は、私はこれらの関係を定義しています方法です。

$deliveries = Delivery::with('outboundShipment')->with('inboundShipment')->get();と呼ぶと、配送のリストが表示され、各配送にはoutbound_shipmentinbound_shipmentがモデルのプロパティとして含まれています。

ただし、配送に配送を含めるときにはこれは機能しません。私が$shipments = Shipment::with('delivery')->get();と呼ぶと、すべて出荷され、2つのフィールドはヌルです:delivery_iddeliveryです。

ここで間違っているのは何ですか?少なくとも、delivery_idフィールドはnullではないはずです。前述のとおり、私はモデルのsave()に電話してから、addRelatedShipments()に電話をかけます。

+0

出荷時に行ったように、出荷モデルでhasOne関係を2回定義する必要があるとします。 – Shaz

+0

ええ、私はそれが解決策かもしれないと思ったが、それは私の関係論理に反していないだろうか?各貨物には配送が1つしかありません。同じ項目 'delivery_id 'を使用したいと思います。 – Rail24

+0

これは問題ありませんが、配送を参照する2つの異なる「キー」があります。それ(荷物)は、どちらを扱うべきかを知る必要があります。 https://github.com/laravel/framework/blob/5.2/src/Illuminate/Database/Eloquent/Model.php#L729 – Shaz

答えて

0

出荷品にはdelivery_idが含まれているため、配送モデルとの関係をBelongsToとして定義する必要があります。あなたの関係を次のように更新してください:

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

} 
+0

私の悪いです。私は当初これを持っていて、同じ結果を得ました。私は 'hasOne'に入れ替えて何か違うものを試しました。 – Rail24

関連する問題