不同的价值观与勇气
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();
我正在尝试从数据库中检索数据并将它们绑定到 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()
只需做:
$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();