Отличительные значения с отрывом
Я пытаюсь извлечь данные из базы данных и связать их с HTML-тегом выбора, и для их привязки мне нужно использовать pluck, чтобы я получил поле, которое я хочу показать в массиве (ключ => значение), из-за FORM::Выбрать. Нормальный срыв получает все результаты, а я хочу использовать разные. Моя модель Room и выглядит так:
class Room extends Eloquent
{
public $timestamps = false;
protected $casts = [
'price' => 'float',
'floor' => 'int',
'size' => 'float'
];
protected $fillable = [
'capacity',
'description',
'price',
'floor',
'size',
'type',
'photo_name'
];
}
Хотя моя функция, которую я использую в контроллере, выглядит так:
public function getRooms()
{
$roomType = Room::pluck('type','type');
$roomFloor = Room::pluck('floor','floor');
return view('roomgrid')->with('type',$roomType)->with('floor',$roomFloor);
}
И мой взгляд содержит этот кусок кода для получения этажей:
{{FORM::select('floor', $floor, null,['class'=>'basic'])}}
Таким образом я получаю дублированные этажи, которые я не хочу. Есть ли способ, чтобы я мог получить отдельные этажи и сорвать их? Заранее спасибо.
6 ответов
Почему бы не использовать groupBy()
?
$roomType = Room::groupBy('type')->pluck('type','type');
Отдельный может помочь:
Room::query()->distinct()->pluck('type');
Что будет переведено в следующий SQL:
SELECT DISTINCT type FROM rooms
ты можешь это сделать
$roomType = Room::pluck('type')->unique();
$roomFloor = Room::pluck('floor')->unique();
2019 Обновление
Вам не нужно использовать 2 аргумента с pluck()
просто сделайте:
$roomType = Room::groupBy('type')->pluck('type');
конечно для получения его в массив:
$roomType = Room::groupBy('type')->pluck('type')->toArray();
Иногда я использую результат для whereIn
пункт, это полезно для этого.
Вы можете использовать или KeyBypluck с той же парой ключ-значение, чтобы выбрать отличные значения. Массив PHP может иметь только уникальные ключи. Из этой идеи мы можем получить уникальные модели на основе ключа массива.
Room::keyBy('floor')->pluck('floor');
или же
Room::pluck('floor', 'floor');