私はDelivery
とShipment
という2つのモデルを持っています。 OutboundShipment
とInboundShipment
:Laravelの一対一の関係が期待どおりに機能しないのはなぜですか?
Deliveries
はShipment
を持つ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_shipment
とinbound_shipment
がモデルのプロパティとして含まれています。
ただし、配送に配送を含めるときにはこれは機能しません。私が$shipments = Shipment::with('delivery')->get();
と呼ぶと、すべて出荷され、2つのフィールドはヌルです:delivery_id
とdelivery
です。
ここで間違っているのは何ですか?少なくとも、delivery_id
フィールドはnullではないはずです。前述のとおり、私はモデルのsave()
に電話してから、addRelatedShipments()
に電話をかけます。
出荷時に行ったように、出荷モデルでhasOne関係を2回定義する必要があるとします。 – Shaz
ええ、私はそれが解決策かもしれないと思ったが、それは私の関係論理に反していないだろうか?各貨物には配送が1つしかありません。同じ項目 'delivery_id 'を使用したいと思います。 – Rail24
これは問題ありませんが、配送を参照する2つの異なる「キー」があります。それ(荷物)は、どちらを扱うべきかを知る必要があります。 https://github.com/laravel/framework/blob/5.2/src/Illuminate/Database/Eloquent/Model.php#L729 – Shaz