Je veux vérifier que les pays existent dans les pays et la case à cocher sera affichée. Les valeurs proviennent directement de la base de données. Je ne peux pas définir la valeur à l'entrée car il s'agit d'un tableau / plusieurs valeurs. Donc, je veux vérifier chaque tableau pour que ce soit une case à cocher.
Contrôleur:
array_keys() expects parameter 1 to be array, object given
lame
<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>
Comme vous pouvez le voir, j'ai mis une déclaration php dans la lame pour vérifier que $ country_region existe ou non dans les pays. J'ai eu des erreurs liées au tableau comme ci-dessous:
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);
}
Base de données:
Region Table:
5 Réponses :
Je ne pense pas que vous ayez besoin d'une fonction de tableau comme in_array puisque vous bouclez déjà chaque pays, simple si cela devrait fonctionner, veuillez également montrer le contenu des tableaux que vous essayez de comparer.
<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>
que voulez-vous dire par le contenu des tableaux? vous voulez dire la base de données?
Oui, contenu de tableaux tels que Country , Country_Region
assurez-vous que $ country_region est un tableau
Cette déclaration est plus appropriée pour les commentaires que pour les réponses. Veuillez préciser.
Utilisez pluck au lieu de select dans la requête.
$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');
pourquoi dois-je utiliser pluck au lieu de select?
Vous avez utilisé in_array c'est la raison pour laquelle vous avez besoin d'un tableau pour comparer la valeur et la méthode pluck renvoie un tableau
$ country_region n'est pas un tableau dans votre contrôleur. C'est une collection éloquente . Pour le changer en tableau, utilisez simplement toArray () dessus.
Dans votre contrôleur, remplacez ceci:
$items = array(
'region' => $region,
'countries' => $countries,
'country_region' => $country_region->toArray(),
);
par ceci:
$items = array(
'region' => $region,
'countries' => $countries,
'country_region' => $country_region,
);
@asad a mis à jour ma réponse.
Utilisez pluck pour obtenir l'identifiant de tous les pays dans un tableau
<option value="{{$item->id}}" selected @if (in_array($item->id, $country_region)) checked="checked"
@endif>{{$item->name}}
</option>
Ensuite, n'utilisez plus array_keys () . Modifiez votre code HTML comme ceci
$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();
$ item-> idest un objet mais vous le mettez sur la méthodein_array ()parce que $ item-> id est également un tableau à l'intérieur de $ country_region. @Moshiur
essayez-vous de sélectionner une option? alors pourquoi ajoutez-vous un attribut vérifié? il est utilisé dans la case à cocher mais vous l'utilisez dans la case de sélection
J'ai déjà utilisé la case à cocher mais je ne fonctionne toujours pas
vous devez l'ajouter en dehors de la boîte de sélection
@Moshiur veut probablement utiliser
sélectionné?