2017-12-20 4 views
0

I Drop-Down-Menü bin mit der Site auszuwählen als:Laravel Formular :: Wählen

{{ Form::select('site', $sites, null, ['class' => 'form-control', 'placeholder' => 'Select a Site']) }} 
{{ Form::label('site','site*') }} 

Ich bin die ausgewählte Website in der Datenbank als site_id speichern. Da dies den Index des ausgewählten Elements aus der Liste zurückgibt, wird site_id als in der Datenbank gespeichert, wenn das erste Element ausgewählt wird.

Das Problem hier ist, site_id ist ein Fremdschlüssel in meiner Datenbank und dies verursacht Fehler beim Abgleich mit der column:id der sites Tabelle. Da die id Spalte, die von Laravel Migrationsgerüst erzeugt wird, beginnt von und die site_id zurückgegeben von Form::select startet von .

Gibt es trotzdem, dass der von Form::select zurückgegebene Index von starten würde?

Oder gibt es eine andere Möglichkeit, das Problem zu lösen?

+0

Können Sie zeigen, wie Sie dem Blade $ Sites bereitstellen? –

+0

$ sites = Site :: latest() -> get (['name']); Und ich benutze den Laravel-Kompakt ('Sites'). –

+0

Versuchen Sie, Site :: latest() -> get() -> pluck ('name', 'id') -> toArray() zu verwenden. Dies ändert den Index/Wert der Auswahl, um der ID des Elements zu entsprechen. –

Antwort

0

Wenn Sie die Websites von DB sind immer, original IDs hält das Problem zu lösen:

$sites = Site::pluck('name', 'id'); 

Dieser Code eine Liste von Websites Namen mit echten IDs generieren:

[1 => 'Site name 1', 2 => 'Site name 2'] 
+0

Danke. Aber das würde nur die ID 0 auf 1 ändern. Und so würde die Seite in dem Index 0 und diejenige in dem Index 1 als dieselbe gespeichert werden. Recht? –

+0

@SijanBhattarai Sie haben gesagt, Sie möchten, dass es als 1 statt als 0 gespeichert wird. Wenn es nicht das ist, was Sie wollen, versuchen Sie bitte zu erklären, was genau Sie erreichen möchten. –

+0

Ich habe die Frage bearbeitet. Ich hoffe, es ist klarer. Vielen Dank. –

0

Sie haben viele Lösungen

Zuerst, nur mit der Validierung überprüfen, Standort muss nicht 0 sein, da Ihr Controller

use Illuminate\Validation\Rule; 

/** ... */ 
$this->validate($request, [ 
    'site'=>['required',Rule::notIn([0])] 
]) 

Sie können auch überprüfen, wo Sie Site-Modell speichern:

DB::transaction(function() use($request){ 
    /** mapping of site attribute */ 
    if($site->save()) 
    { 

    } 
} 

Sie auch da Client-Seite über JavaScript überprüfen

{{ Form::select('site', $sites, null, ['id'=>'sites', 'class' => 'form-control', 'placeholder' => 'Select a Site']) }} 
{{ Form::label('site','site*') }} 


$("form input['type=submit']").click(function(e){ 
    e.preventDefault(); 
    if($('#sites').val() == 0) 
    { 
     alert('Please, select a site'); 
     return; 
    }else{ 
     $(this).submit(); 
    } 
}) 
0

, wenn Sie Namen ohne ID Einsatz möchten Sie $ verwenden können sites = Site :: pluck ('Name', 'Name'); Ich hoffe, das wird funktionieren.