Laravel:为什么pluck('name','id')会返回所有用户的名字?

时间:2018-02-06 07:00:50

标签: laravel

我在程序中发现了一个错误,我意识到User::find(1)->pluck('name', 'id')会返回我在数据库中拥有的所有names的集合。

为什么呢? User::find(1)只返回一个用户对象,不应该采取相应的工作吗?

其他调查结果:

User::find(1)->get()->pluck('name', 'id')会返回相同的结果 但那是因为User::find(1)->get()也会返回所有用户。再次不直观的imo。

User::find(1)->take(1)->pluck('name', 'id')但是有效。

3 个答案:

答案 0 :(得分:2)

您执行了两次查询。您希望这样做只获得一个用户的名称和ID:

$user = User::where('id', 1)->pluck('name', 'id');

而不是:

User::find(1)->pluck('name', 'id')

答案 1 :(得分:1)

您不应在pluck()之后使用find(),因为它只会运行查询以从所有行获取ID。

请执行以下操作:

$user = User::where('id', 1)->pluck('name', 'id');

或类似的东西,

$user = User::find(1)->name;  //if you need to fetch just one column

答案 2 :(得分:1)

pluck

  

获取具有给定列值的数组

它不会过滤数据

您可以使用find

代替whereId方法
$user = User::whereId(1)->pluck('name', 'id');