22

我正在尝试从数据库中检索数据并将它们绑定到 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'])}}

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

4

6 回答 6

29

为什么不使用groupBy()

$roomType = Room::groupBy('type')->pluck('type','type');
于 2017-02-24T20:31:12.803 回答
20
Room::unique('floor')->pluck('floor', 'floor');
于 2018-05-08T02:28:53.337 回答
8

distinct可以解决问题:

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

这将被翻译成以下SQL:

SELECT DISTINCT type FROM rooms
于 2019-11-11T23:18:23.173 回答
4

2019 更新

您不需要使用 2 个参数pluck()

只需这样做:

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

当然是将其放入数组中:

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

有时我使用结果 forwhereIn子句,它对此很有用。

于 2019-07-08T13:27:29.747 回答
1

你可以这样做

    $roomType = Room::pluck('type')->unique();
    $roomFloor = Room::pluck('floor')->unique();
于 2021-12-24T03:03:52.540 回答
0

您可以使用KeyBy或使用相同的键值对来选择不同的值。PHP数组只能有唯一键。从这个想法我们可以得到基于数组键的唯一模型。

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

或者

Room::pluck('floor', 'floor');
于 2021-06-29T14:02:35.463 回答