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

laravel 5查询渴望加载的多个约束

孙绍辉
2023-03-14

在我的控制器我有以下代码:

//Example Data;
$date = Carbon::now();
$order = 'name'; // it can be by name, id or created_at;

// Approach i try for getting data of user with eager loaded products

//1st approach
$user = User::with([
    'products' => function ($query) use ($date, $order) {
        $query->where('created_at', $date)->orderBy($order, 'desc');
    },
])->get();

//2nd approach
$user = User::with([
    'products' => function ($query) use ($date, $order) {
        $query->where('created_at', $date);
        $query->orderBy($order, 'desc');
    },
])->get();

在这两种方法中,只读取查询的第一个条件。

我想让1where()子句和1orderBy在急切加载的数据中被过滤。

有什么我错过了做的吗?我把它编错了吗?

共有3个答案

宋华灿
2023-03-14

正如您所描述的,这两种方法都应该很有效。

是否存在使用-

dd($query-

尉迟高澹
2023-03-14

问题是,您的orderBy是在"子查询"。当laravel进行连接时(这就是一个急切的加载),order_by将与您无关。

我认为一个有用的解决方案是在查询之外使用orderby子句,使用laravel提供的别名。

$user=user::with(['products'=

权胜泫
2023-03-14

尝试使用嵌套的即时加载。比如:

$user = User::with([
    'products' => function ($query) use ($date) {
            $query->where('created_at', $date);
        },'products.order' =>function ($query) use ($order) {
            $query->orderBy($order, 'desc');
        } 
    ])->get();
 类似资料:
  • 问题内容: SQLAlchemy支持渴望加载关系,这基本上是一条语句。但是,如果模型具有两个或多个关系,则可能是非常庞大的联接。例如, 该查询的性能实在是太差了,因为中和会产生一个巨大的表。但是和在这里没有关系,因此它们不应该是。它应该是两个分开的查询。并且由于会话具有某种程度的缓存,因此我将查询更改为此。 这次的性能要好得多。但是,我不认为这样做是正确的。我不确定会话结束时标签缓存是否会过期。

  • 有一个典型的我与邮政 职位模型: 迁移后: 评论模型: 评论迁移: 我想在拉威尔使用渴望加载。 例如我怎样才能使用“急切加载”获得他最近评论的所有帖子? 我试过这个: 但像这样,我得到了所有的评论。需要帮忙吗? 最好的问候 编辑: Foreach语句(Blade):

  • 拉威尔说: 我需要的是这样的东西 我们可以在一个关系中加载多个关系。 这有可能吗?

  • 问题内容: 好吧,我对此完全感到困惑。我正在尝试构建按类别组织的已发布网页菜单。 Category.rb: Page.rb Page模型还具有:is_published,因此我也尝试对其进行过滤。我不愿意发布我微不足道的查询尝试,但是除了乞求更聪明的人之外,没有其他解决方案: (自己是@current_website) 这大部分返回我需要的内容,但没有返回未发布页面的父类别。例如,如果我有以下方法

  • 我有一个问题,就是基于hasMany关系从数据库中获取数据并将其发送到Larave中的api。在下面的代码中,Laravel没有给我客户id=$id的产品。我不知道为什么,我不能在$query旁边发送$id。如果我把号码写在“我有很好的安全套,但我需要自动拿。 所有api代码 先谢谢你。

  • 问题内容: 我有一个实体A,它具有-B实体,而B具有-A与@OneToOne双向关联。 现在,当我找到所有A记录时,hibernate使用B上的左外部联接执行两个查询,如下所示: 第一次查询会加载A和B字段,但可以,但是为什么要执行第二次查询来重新加载A?我认为此查询将B中的A内容加载,但此A显然是包含B的A …因此它已经加载了第一个查询,不是吗? -编辑- 实体A: 实体B: 就是这种情况,在A