Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Laravel 6中,select()和/或Pull()是否已被破坏?_Laravel_Eloquent_Laravel Query Builder - Fatal编程技术网

在Laravel 6中,select()和/或Pull()是否已被破坏?

在Laravel 6中,select()和/或Pull()是否已被破坏?,laravel,eloquent,laravel-query-builder,Laravel,Eloquent,Laravel Query Builder,以下代码不会提取所选用户记录的名称列。而是返回整行。在我做一个可重新创建的示例之前:这是预期的行为吗 我希望显式地跨连接选择列,以减少JSON负载大小,并将嵌套的模型层次结构返回给客户端 我应该补充一点,在同一行上使用pulk()函数时,我也遇到了同样的行为。也许我做错了什么 有大量的例子显示了早期版本的Laravel的这种方法第6版可能已破坏此功能。 $query = Post::whereHas('user.address', function ($query) use ($lat, $lo

以下代码不会提取所选
用户
记录的名称列。而是返回整行。在我做一个可重新创建的示例之前:这是预期的行为吗

我希望显式地跨连接选择列,以减少JSON负载大小,并将嵌套的模型层次结构返回给客户端

我应该补充一点,在同一行上使用
pulk()
函数时,我也遇到了同样的行为。也许我做错了什么

有大量的例子显示了早期版本的Laravel的这种方法第6版可能已破坏此功能。

$query = Post::whereHas('user.address', function ($query) use ($lat, $lon, $distance) {
    $query->distance($lat, $lon, $distance);
})->with([
    'user' => function ($query) {    
        $query->select('name'); // TODO: Report this bug. I've also tried pluck()
    },
    'user.address' => function ($query) use ($lat, $lon, $distance) {
        $query->distance($lat, $lon, $distance);
    },
    'user.address.city',
    'bids' => function ($query) {
        $query->orderBy('amount', 'DESC');
    },
    'bids.user',
    'images',
]);
pluck()
是一种收集方法,它执行查询并返回指定字段的简单收集对象

在子查询生成器中使用
pluck()
执行它(不返回任何内容,因为您将其赋值为nothing),而
$query
变量未被修改,其行为与返回所有列的正常行为相同

如果要在此查询中转储
pluck()
的值,您将看到它是一个名称数组,因此,它对查询本身没有影响

'user'=>函数($query){
dd($query->pull('name'));
}
select()
在这种情况下应该可以正常工作。您只需要提供关系键,否则它只会返回null对象

'user'=>函数($query){
$query->select(['id','name']);
},
pluck()
是一种收集方法,它执行查询并返回指定字段的简单收集对象

在子查询生成器中使用
pluck()
执行它(不返回任何内容,因为您将其赋值为nothing),而
$query
变量未被修改,其行为与返回所有列的正常行为相同

如果要在此查询中转储
pluck()
的值,您将看到它是一个名称数组,因此,它对查询本身没有影响

'user'=>函数($query){
dd($query->pull('name'));
}
select()
在这种情况下应该可以正常工作。您只需要提供关系键,否则它只会返回null对象

'user'=>函数($query){
$query->select(['id','name']);
},

尝试使用此符号
Post::with('user:id,name')->get()
根据上面的注释,您必须在查询中包含关系键,否则它将不返回任何内容。您还可以研究序列化方法来修剪JSON输出,而不是编写复杂的查询。尝试使用这种表示法
Post::with('user:id,name')->get()
根据上面的注释,您必须在查询中包含关系键,否则它将不返回任何内容。您还可以研究序列化方法来修剪JSON输出,而不是编写复杂的查询。Hi@Darryl,确认包含关系密钥是解决方案。非常感谢。关于您对序列化的评论:我倾向于使用复杂的查询来最小化垃圾收集器和序列化程序的压力。我不希望内存中的属性比需要的更多。我太快标记了此属性。不幸的是,它不适用于嵌套关系,如
user.address
,从原始代码中,您需要确保选择地址id和城市id,并且根据(我假设您正在使用的)Laravel地理文档,
select()
需要在
distance()之前
call.Hi@Darryl,确认包含关系密钥是解决方案。非常感谢。关于您对序列化的评论:我倾向于使用复杂的查询来最小化垃圾收集器和序列化程序的压力。我不希望内存中的属性比需要的更多。我太快标记了此属性。不幸的是,它不适用于嵌套关系,如
user.address
,从原始代码中,您需要确保选择地址id和城市id,并且根据(我假设您正在使用的)Laravel地理文档,
select()
需要在
distance()之前
打电话。