Laravel中PHP/PDO fetch方法的等效实现及代码改造咨询
用Laravel查询构造器替代PDO的fetch循环
嘿,很高兴看到你在迁移到Laravel查询构造器!针对你这个场景,Laravel提供了非常简洁的替代方案,完全不需要像PDO那样手动写while ($row = $stmt->fetch())循环。
基础遍历方案
首先,DB::table('users')->get()返回的是一个Laravel Collection(集合),你可以直接用foreach遍历它,每个元素是一个StdClass对象,直接通过->访问字段即可:
public function queryUsers() { $users = DB::table('users')->get(); foreach ($users as $user) { $this->addedUsers[$user->user_id] = $user->slack_handle; $this->addedUserNames[$user->user_id] = $user->name; } }
更优雅的集合方法:pluck()
其实你的需求是把user_id作为键,对应字段作为值存入数组,Laravel的集合专门提供了pluck()方法来干这个事,一行代码就能搞定,完全不用手动循环:
public function queryUsers() { // pluck(值字段名, 键字段名),最后转成数组 $this->addedUsers = DB::table('users')->pluck('slack_handle', 'user_id')->toArray(); $this->addedUserNames = DB::table('users')->pluck('name', 'user_id')->toArray(); }
这个写法既简洁又符合Laravel的最佳实践,pluck()会直接帮你生成键值对结构的集合,调用toArray()就能转成你需要的普通数组。
额外:如果使用Eloquent模型
如果你已经创建了对应的User Eloquent模型(app/Models/User.php),写法会更清爽:
public function queryUsers() { $this->addedUsers = User::pluck('slack_handle', 'user_id')->toArray(); $this->addedUserNames = User::pluck('name', 'user_id')->toArray(); }
简单总结下:Laravel的查询结果集合已经封装了所有你需要的遍历、转换方法,比手动操作PDO结果集高效得多,也更易读。
内容的提问来源于stack exchange,提问作者Finn
相关产品推荐
相关产品推荐

