当前位置: 首页 > 知识库问答 >
问题:

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

司空宣
2024-02-18

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

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

共有1个答案

东方吕恭
2024-02-18

在 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 实例。

 类似资料:
  • 我试图使用cypher创建一个查询,该查询将“查找”厨师可能有的缺失食材,我的图是这样设置的:

  • 需要筛选一个项目列表并检查item.discount()<=0,以防没有找到返回可选对象类型。 这是一个为列表添加值的代码,但我不知道如果列表是空的,如何获得可选对象

  • 问题内容: 我每月都有一组职位。现在,我需要一个数组,其中包含每个月发布的帖子总数。我尝试下面的MySql查询,它的工作正常,但我期望0(零)几个月没有记录。在这里,它不返回0。 我读到COUNT()不会返回“ 0”,那么我该如何实现呢? 我尝试了IFNULL()和COALESCE(),但仍然得到相同的结果。请帮助此查询。谢谢你...... 结果: 预期结果(没有一月份的职位): 样本数据: 问题

  • 问题内容: 如果这没有道理,请原谅我的示例。我将尝试使用一种简化的方法来鼓励更多的参与。 考虑如下表: dt | mnth | foo --------------+------------+-------- 2012-12-01 | December | … 2012-08-01 | August | 2012-07-01 | July | 2012-06-01 | June | 2012-05

  • 问题内容: 我有下表: 如果给定的ID不存在,我想插入具有默认Val的ID。但是,如果它已经存在,我想增加Val的值。 我有以下代码: 并且它可以工作,但是我想用一个SQL语句来完成。我可以吗? 编辑 : 从@ Xikinho90的答案,我的最终代码是 问题答案: 您可以使用插入或替换。 我认为这可以解决问题 您只需要用输入的ID替换数字 谢谢奇科

  • 这是我的超文本标记语言PHP表页面的完整代码...