我经常发现按主键ID索引结果非常有用。
示例:
$out = [];
$users = User::where('created_at', '>=', '2015-01-01')->get();
foreach ($users as $user) {
$out[$user->id] = $user;
}
return $out;
有没有用Eloquent一次性做到这一点?使用0 ... n索引没用。
答案 0 :(得分:6)
您可以在收藏中使用getDictionary()来完成此操作。
像这样:
$users = User::where('created_at', '>=', '2015-01-01')->get()->getDictionary();
答案 1 :(得分:1)
我通过一个扩展Eloquent的超级模型创建了我自己的解决方案。
完整解决方案: https://gist.github.com/yadakhov/741173ae893c1042973b
/**
* Where In Hashed by primary key
*
* @param array $ids
* @return array
*/
public static function whereInHash(array $ids, $column = 'primaryKey')
{
$modelName = get_called_class();
$primaryKey = static::getPrimaryKey();
if ($column === 'primaryKey') {
$column = $primaryKey;
}
$rows = $modelName::whereIn($column, $ids)->get();
$out = [];
foreach ($rows as $row) {
$out[$row->$primaryKey] = $row;
}
return $out;
}
答案 2 :(得分:0)
不是有说服力的,但这可能比循环所有结果更好。
$users = Users::all();
return array_combine($users->modelKeys(), $users);