如果beLongsTo为特定项目为空,则返回另一个belongsTo关系

时间:2013-11-28 15:55:31

标签: laravel laravel-4

如果订单上没有送货地址,我想退回客户地址。

这就是我一直在尝试的:

public function deliveryAddress()
{
    if ( $this->delivery_address )
    {
        return $this->belongsTo("DeliveryAddress",'delivery_address');
    }
    return $this->belongsTo("Customer", 'customer_id');
}

如果我想使用Order :: with('deliveryAddress') - > get(),这不起作用,如果我有模型而不是集合。

这可能吗?

1 个答案:

答案 0 :(得分:0)

当您使用关系时,您仍然没有可用的行,关系是构建过程中的查询,这样,您仍然可以在此处使用t have delivery_address`:

if ( $this->delivery_address )

因为此时您的模型仍未启动。它(或它们)将在get()first()之后启动,然后您就可以访问它们了。所以你可以

public function deliveryAddress()
{
    return $this->belongsTo("DeliveryAddress",'delivery_address');
}

public function customerAddress()
{
    return $this->belongsTo("Customer", 'customer_id');
}

class Order extends Eloquent {

    public function getAddress()
    {
        if ($this->delivery_address)
        {
            return $this->deliveryAddress;
        }
        else
        {
            return $this->customerAddress;
        }
    }

}

$order = Order::with('deliveryAddress', 'customerAddress')->first();

echo $order->getAddress()->street_name;

这是未经测试的代码,因此最初可能无法正常工作,但这就是您可以做的事情。