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



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

这就是我一直在尝试的:

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

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

这可能吗?

当您使用关系时,仍然没有可用的行,关系是在构建过程中的查询,这样,您仍然没有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;

这是未经测试的代码,所以一开始可能不起作用,但这就是你可以做什么的想法。

最新更新