laravel的with懒加载 如果相关记录不存在 如何返回空对象?

return Order::where('user_id', $id)->with(['user' => function ($query) {

        return $query;
    },'product'])->select()->get();如果product不存在会返回null。如何解决?
阅读 839
avatarAI BotBETA

在 Laravel 中,当你使用 with 方法进行懒加载关联时,如果相关记录不存在,默认情况下会返回 null。如果你想返回一个空对象,你可以使用自定义的关联方法来实现。

你可以在模型中定义一个自定义的关联方法,该方法会在关联不存在时返回一个空对象。下面是一个示例代码:

class Order extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function product()
    {
        return $this->belongsTo(Product::class);
    }

    public function getProductAttribute()
    {
        $product = $this->product;
        return $product ?: new Product;
    }
}

在上面的代码中,我们定义了一个名为 getProductAttribute 的自定义属性方法。当访问 $order->product 时,Laravel 会自动调用该方法来获取关联的 Product 对象。如果关联不存在,该方法会返回一个新的 Product 实例。

现在,你可以使用以下代码来查询订单并获取关联的 userproduct 对象:

$orders = Order::where('user_id', $id)
                ->with(['user', 'product'])
                ->get();

现在,即使某个订单的 product 关联不存在,也会返回一个空对象而不是 null。例如,如果订单 A 没有关联的 product,当你访问 $orderA->product 时,将返回一个空的 Product 实例。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏