3
votes

Comment vérifier que les valeurs de tableau de cases à cocher existent depuis la base de données PHP Laravel?

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:

Tableau des régions du pays: Country Region Table

Region Table:

Tableau des régions

Tableau des pays: Tableau des pays


6 commentaires

$ item-> id est un objet mais vous le mettez sur la méthode in_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é ?


5 Réponses :


0
votes

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>


2 commentaires

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



-1
votes

assurez-vous que $ country_region est un tableau


1 commentaires

Cette déclaration est plus appropriée pour les commentaires que pour les réponses. Veuillez préciser.



0
votes

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');


2 commentaires

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



0
votes

$ 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,
    );


1 commentaires

@asad a mis à jour ma réponse.



0
votes

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();


0 commentaires