Определенные ценности с отвагой

Я пытаюсь получить данные из базы данных и привязать их к тегу выбора html, а для их привязки мне нужно использовать pluck, чтобы я получил поле, которое хочу показать в массиве (ключ => значение), из-за FORM: :Выбрать. Нормальный сбор дает все результаты, в то время как я хочу использовать разные. Моя модель - Комната, и она выглядит так:

    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'])}}

Вот так получаются дублированные этажи, чего я не хочу. Есть ли способ получить отдельные полы и ощипать их? Заранее спасибо.


person Arlind Hajdari    schedule 24.02.2017    source источник


Ответы (5)


Почему бы не использовать groupBy()?

$roomType = Room::groupBy('type')->pluck('type','type');
person Buglinjo    schedule 24.02.2017
comment
Я использовал это в обратном порядке, и он не работал xd. Сработало, спасибо за быстрый ответ. - person Arlind Hajdari; 24.02.2017
comment
Да, в обратном направлении это не сработает, потому что извлекайте массив get, а не объект Collection. Если у вас - ›get () вместо pluck (), он получит объект Collection, но groupBy создаст вложенный массив. Таким образом, вам нужно только использовать красноречие, чтобы просто вызвать запрос MYSQL GROUP BY, и все. - person Buglinjo; 24.02.2017
comment
Мне просто любопытно, почему вы дали выщипывать два параметра? Не может быть: Room::groupBy('type')->pluck('type');? - person Learner; 24.04.2018
comment
@Learner Ему нужно, чтобы ключ и значение были такими же, как я понял из его примеров. - person Buglinjo; 24.04.2018
comment
в плане производительности - это лучшее красноречивое решение? - person Dr. House; 18.09.2018

independent может помочь:

Room::query()->distinct()->pluck('type');

Что будет переведено в следующий SQL:

SELECT DISTINCT type FROM rooms
person vbarbarosh    schedule 11.11.2019

Обновление 2019

Вам не нужно использовать 2 аргумента с pluck()

просто сделай:

$roomType = Room::groupBy('type')->pluck('type');

конечно, чтобы поместить его в массив:

$roomType = Room::groupBy('type')->pluck('type')->toArray();

Иногда я использую результат для предложения whereIn, это полезно для этого.

person Learner    schedule 08.07.2019

Вы можете использовать KeyBy или взять ту же пару ключ-значение, чтобы выбрать Отличные ценности. Массив PHP может иметь только уникальные ключи. Из этой идеи мы можем получить уникальные модели на основе ключа массива.

Room::keyBy('floor')->pluck('floor');

or

Room::pluck('floor', 'floor');
person Muthu Kumar    schedule 29.06.2021