laravel - Laravel 6 中的 select() 和/或 pluck() 是否被破坏?
问题描述
以下代码不会提取所选user
记录的名称列。而是返回整行。在我制作一个可重新创建的示例之前:这是这里的预期行为吗?
我想跨连接显式选择列以减少我的 JSON 有效负载大小,并将嵌套模型层次结构返回给我的客户端。
pluck()
我应该补充一点,在同一行上使用该功能时我也遇到了相同的行为。也许我做错了什么。
有大量的例子展示了这种方法与早期版本的 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()
会执行它(不返回任何内容,因为您没有将其分配给任何内容),而$query
变量未修改并且行为正常,返回所有列。
如果您要转储pluck()
此查询内部的值,您会看到它是一个仅包含名称的数组,因此,它对查询本身没有影响。
'user' => function ($query) {
dd($query->pluck('name'));
}
select()
在这种情况下应该可以正常工作。您只需要提供关系键,否则它只会返回一个空对象。
'user' => function ($query) {
$query->select(['id', 'name']);
},
推荐阅读
- algorithm - 连通图的 DFS
- discord - 由于没有端口转发,并且您不知道我的 IP 地址,托管 Discord Bot 是如何工作的?
- xcode - 在 Xcode 中运行 AR App 模板时出现错误
- python - 通过 JSON 问题在 Python tradingview-binance webhook 中将要购买/出售的硬币数量设置为“所有硬币”
- python - 当被测小部件必须可见才能工作时,PyQt5 下的 QtTest 失败
- python - Groupby,迭代并连接到文本文件
- python - 如何在运行“tf.keras.models.load_model(..)”时获得类似于使用“include_top=False”的结果
- python - How to slice on values instead of index
- java - 未指定整数命令行
- python - 具有特定端口的 WSDiscovery