以下查询返回每个Quote
的id-s,而不只返回一个:
Quote::find(1)->pluck('id'); // --> [1, 2, 3, 4, ...]
为什么会这样?
奇怪的是,查询:
Quote::where('id', 1)->pluck('id'); // --> [1]
按预期工作。
答案 0 :(得分:4)
(基本上)有两种pluck()
- 一种适用于集合,另一种适用于Builder
个对象。当你这样做
Quote::where('id', 1)->pluck('id');
然后你有一个Builder
对象,因为在拔除之前你还没有从数据库中返回任何东西 - 你还在构建查询。这样就行了,因为这个选择被添加到查询中并执行了。
但是,当您执行Quote::find(1)
时,会得到一个Quote
对象 - 既不是Builder
也不是Collection
。相反,Laravel创建了一个新查询,它会根据您所依据的模型为您从数据库中提取值。在这种情况下,这是Quote
。
此行为在5.2中已更改,因此在5.1中,您只需返回列值 - 1
,如预期的那样。但pluck()
正在接管早期版本的Laravel中曾经被称为lists()
的东西,从5.2开始。所以你的结果是正确的 - 但令人困惑。
答案 1 :(得分:4)
Quote::find(1)
正在返回一个Quote对象,而不是一个Quotes集合。然后,您在该引用对象上调用pluck('id')
。由于Quote对象实际上没有pluck()
方法,因此实际做的是为引号创建一个新的查询构建器实例,并调用pluck。就像你Quote::pluck('id')
一样。这就是你获得所有ID的原因。
由于Quote::find(1)
将返回Quote对象,因此您无需在其上调用pluck()
。您可以进入酒店。
$quote = Quote::find(1);
echo $quote->id;