Ответ 1
Текущей альтернативой для pluck()
является value()
.
Я пытаюсь обновить свой проект L5.1 → L5.2. В руководстве по обновлению есть одна вещь, которая не ясна для меня:
Метод
lists
в сборке, построителе запросов и запросе Eloquent объекты-строители были переименованы вpluck
. Подпись метода остается тем же.
Это нормально, переименовать refactoting от lists()
до pluck()
не проблема. Но что с полезным pluck()
методом, который был в L5.0 и L5.1?
Из 5.0 документации:
Получение одиночной колонки из строки
$name = DB::table('users')->where('name', 'John')->pluck('name');
Какова альтернатива старому методу pluck()
в L5.2?
UPDATE:
Пример:
var_dump(DB::table('users')->where('id', 1)->pluck('id'));
L5.1:
// int(1)
L5.2:
// array(1) { [0]=> int(1) }
Текущей альтернативой для pluck()
является value()
.
Laravel Pluck возвращает массив
если ваш запрос:
$name = DB::table('users')->where('name', 'John')->pluck('name');
тогда массив выглядит так (ключ - это индекс элемента. Автоматически увеличенное значение):
[
1 => "name1",
2 => "name2",
.
.
.
100 => "name100"
]
но если вы делаете так:
$name = DB::table('users')->where('name', 'John')->pluck('name','id');
тогда ключ является актуальным индексом в базе данных.
key||value
[
1 => "name1",
2 => "name2",
.
.
.
100 => "name100"
]
Вы можете установить любое значение в качестве ключа.
В Laravel 5. 1+ вы можете использовать значение() вместо pluck.
Чтобы получить первый случай, вы можете использовать
DB::table('users')->value('name');
или использовать,
DB::table('users')->where('id', 1)->pluck('name')->first();
В исходном примере почему бы не использовать метод select() в запросе базы данных?
$name = DB::table('users')->where('name', 'John')->select("id");
Это будет быстрее, чем использование фреймворка PHP, поскольку он будет использовать SQL-запрос для выбора строки для вас. Для обычных коллекций я не считаю, что это применимо, но поскольку вы используете базу данных...
Larvel 5.3: Указание пункта выбора