Laravel Eloquent get()由主键id索引

时间:2015-07-23 15:26:37

标签: laravel hashmap eloquent

我经常发现按主键ID索引结果非常有用。

示例:

$out = [];

$users = User::where('created_at', '>=', '2015-01-01')->get();

foreach ($users as $user) {
    $out[$user->id] = $user;
}

return $out;

有没有用Eloquent一次性做到这一点?使用0 ... n索引没用。

3 个答案:

答案 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);