2017-08-20 2 views
1

J'ai une table de base de données qui stockent la liste de pays, maintenant j'essaie d'obtenir la liste de pays dans une forme de liste déroulante, mais ne fonctionne pas, peut-être manque quelque chose. CodeLaravel comment remplir la boîte de sélection de la base de données

` public function details($id){ 
     //fetch post data 
     //$post = Post::find($id); 

     $country_options = Country::pluck('country', 'id'); 
     $country_options = DB::table('regions')->orderBy('country', 'asc')->pluck('country','id'); 

     //pass posts data to view and load list view 
     return view('dashboard')->with('country_options',$country_options); 

    }` 

et le code qui font écho dans le menu déroulant sous ma forme ressembler à ceci ` '

@foreach($countries as $country)'+ 
       '<option value="{{ $country->id }}"> {{ $country->country }}</option>'+ 
       '@endforeach'+` 

et mon itinéraire ressemble à ceci

Route::get('/Business', '[email protected]')->name('Business'); 

mais je continue à recevoir ce message d'erreur

Undefined variable: countries (View: C:\xampp\htdocs 

ont fait de la recherche, mais pourrait pas bien la solution. toute aide serait appréciée avec documentation/explication.thanks

+0

La première chose que j'ai remarquée est que vous utilisez '$ countries' dans la vue, mais dans le contrôleur, vous passez' 'country_options'' voir. – Bostjan

Répondre

2

Votre erreur est que votre passage un nom de variable à votre vue et en essayant de lire avec un autre nom. J'ai fait un exemple rapide pour vous. Ici, ma table est "Pais" ("Pays" en portugais), et utilise une route de clorure pour la fonction de rappel. (Lavarel 5,4)

Route (web.php):

Route::get('/test', function() { 
    $countries = \App\Pais::all(); 
    return view('test_stackoverflow')->with(['countries' => $countries]); 
}); 

Voir (test_stachoverflow.blade.php):

<select name="countries" id="countries"> 
    @foreach($countries as $country) 
    <option value="{{ $country->id }}">{{ $country->name }}</option> 
    @endforeach 
</select> 

Result


Une autre option, si vous veulent rester avec la méthode de plumer:

Route (web.php):

Route::get('/test', function() { 
    /* $countries = \App\Pais::pluck('name','id'); */ 
    // or 
    $countries = DB::table('pais')->pluck('name','id'); 
    return view('test_stackoverflow')->with(['countries' => $countries]); 
}); 

Voir (test_stachoverflow.blade.php):

<select name="countries" id="countries"> 
    @foreach($countries as $id => $country) 
     <option value="{{ $id }}">{{ $country }}</option> 
    @endforeach 
    </select> 

Les deux solutions ont la même résultat dans le code HTML généré.

J'espère que cela peut vous aider! Cordialement.

+0

Je pense que votre travail ne fonctionnera pas ....avez-vous déjà essayé ou juste écrit le code en réponse? Parce que Pluck retourne une collection maintenant et non un tableau! – lewis4u

+0

Vous avez raison, n'est pas un tableau, c'est une collection. Mais cela fonctionne, j'ai exécuté et testé avant de coller ici. Explication: La classe Collection implémente l'interface IteratorAggregate, qui a la méthode getIterator, appelée implicitement dans les instructions foreach. Liens: Collection: https://laravel.com/api/5.4/Illuminate/Support/Collection.html IteratorAggregate: http://php.net/IteratorAggregate – renanpallin

1

Vous passez country_options de votre contrôleur ne countries

Essayez cette

@foreach($country_options as $country) 
    <option value="{{ $country->id }}"> 
     {{ $country->country }} 
    </option> 
@endforeach 
0

d'abord vous ne avez pas besoin $ id si vous voulez Gell toutes les catégories

code contrôleur Relace avec:

public function details(){ 
    $country_options = Country::All(); 
    return view('dashboard',compact('countries')); 
}