如何检查数据库PHP Laravel中存在的复选框数组值?
Posted
技术标签:
【中文标题】如何检查数据库PHP Laravel中存在的复选框数组值?【英文标题】:How to check checkbox array values exist from database PHP Laravel? 【发布时间】:2020-06-04 08:12:52 【问题描述】:我想检查国家/地区中是否存在这些国家,并且将显示该复选框。这些值直接来自数据库。我无法在输入处设置值,因为它是数组/多个值。所以,我想检查每个数组,使它成为一个复选框。
控制器:
public function edit($id)
$region = Region::find($id);
$countries = Country::all();
$country_region = DB::table('regions')
->select('countries.id', 'countries.name')
->join('country_region', 'regions.id', '=', 'country_region.region_id')
->join('countries', 'country_region.country_id', '=', 'countries.id')
->where('regions.id', '=', $id)
->get();
$items = array(
'region' => $region,
'countries' => $countries,
'country_region' => $country_region,
);
return view('admin.region.edit')->with($items);
刀片
<div class="form-group">
<label>Choose Country</label>
<select id="test" type="checkbox" name="country_id[]">
@foreach ($countries as $item)
<option value="$item->id" selected @if (in_array($item->id, array_keys($country_region))) checked="checked"
@endif>$item->name
</option>
@endforeach
</select>
</div>
如您所见,我将 php 语句放入刀片中以检查国家/地区是否存在 $country_region。我得到了与数组相关的错误,如下所示:
array_keys() expects parameter 1 to be array, object given
数据库:
国家地区表:
区域表:
国家表:
【问题讨论】:
$item->id
是一个对象,但你把它放在 in_array()
方法上
因为 $item->id 也是 $country_region 中的一个数组。 @Moshiur
您是否要选择一个选项?那你为什么要添加检查属性?它在复选框中使用,但您在选择框中使用它
我之前已经使用过复选框但仍然无法使用
您必须将其添加到选择框之外
【参考方案1】:
在查询中使用pluck
而不是select
。
$country_region = DB::table('regions')
->join('country_region', 'regions.id', '=', 'country_region.region_id')
->join('countries', 'country_region.country_id', '=', 'countries.id')
->where('regions.id', '=', $id)
->get()
->pluck('countries.name', 'countries.id');
【讨论】:
为什么我必须使用 pluck 而不是 select? 你已经使用了 in_array 这就是你需要一个数组来比较值并且 pluck 方法返回一个数组的原因【参考方案2】:我认为您不需要像in_array
这样的数组函数,因为您已经在循环每个国家/地区,简单的如果应该可以工作,还请显示您要比较的表格的内容。
<div class="form-group">
<label>Choose Country</label>
<select id="test" type="checkbox" name="country_id[]">
@foreach ($countries as $item)
<option value="$item->id" selected @if ($item->id == $country_region.country.id) checked="checked"
@endif>$item->name
</option>
@endforeach
</select>
</div>
【讨论】:
表格的内容是什么意思?你是说数据库吗? 是的,Country
、Country_Region
等表格的内容【参考方案3】:
$country_region
不是控制器中的数组。这是Eloquent collection
。要将其更改为数组,您只需在其上使用toArray()
。
在你的控制器中,替换这个:
$items = array(
'region' => $region,
'countries' => $countries,
'country_region' => $country_region,
);
用这个:
$items = array(
'region' => $region,
'countries' => $countries,
'country_region' => $country_region->toArray(),
);
【讨论】:
@asad 更新了我的答案。【参考方案4】:使用 pluck 获取数组中所有国家/地区的 id
$country_region = DB::table('regions')
->join('country_region', 'regions.id', '=', 'country_region.region_id')
->join('countries', 'country_region.country_id', '=', 'countries.id')
->where('regions.id', '=', $id)
->pluck('country_region.id')
->toArray();
那就不要再使用array_keys()
了。像这样修改你的 html
<option value="$item->id" selected @if (in_array($item->id, $country_region)) checked="checked"
@endif>$item->name
</option>
【讨论】:
【参考方案5】:确保 $country_region 是一个数组
【讨论】:
这个说法更适合cmets,不适合答案。请详细说明。以上是关于如何检查数据库PHP Laravel中存在的复选框数组值?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不刷新页面 LARAVEL PHP SQL 的情况下插入复选框表?
我想使用 laravel 8 mvc 从一个复选框中检查我的所有复选框
检查某个类别中是不是存在帖子不起作用。 php,刀片,Laravel