不同的价值观与勇气

Distinct values with pluck

我正在尝试从数据库中检索数据并将它们绑定到 html select 标签,为了绑定它们,我需要使用 pluck 以便获得我想要显示的字段一个数组(键 => 值),因为 FORM::select。正常的采摘得到所有的结果,而我想使用不同的。我的模型是 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'])}}

就像这样,我得到了重复的楼层,我不想要。有什么办法可以让我得到不同的地板并采摘它们吗?提前致谢。

为什么不使用 groupBy()

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

2019 年更新

您不需要在 pluck()

中使用 2 个参数

只需做:

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

当然要将它放入数组中:

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

有时我将结果用于 whereIn 子句,这对我很有用。

distinct 可以做到:

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

其中会翻译成如下SQL:

SELECT DISTINCT type FROM rooms

您可以使用 KeyBy 或使用相同的键值对来选择不同的值。 PHP array can only have unique keys.From 这个Idea我们可以得到基于Array key的Unique模型。

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

Room::pluck('floor', 'floor');

你可以做到这一点

    $roomType = Room::pluck('type')->unique();
    $roomFloor = Room::pluck('floor')->unique();