Ich benutze Laravel 5.3 und MySQL. Ich habe versucht, Fremdschlüssel zu verwenden, um Daten aus einer anderen Tabelle abzurufen. Das Feld, das Daten anzeigt, die ich von der anderen Tabelle "Domaines" erhalten habe, ist eine Dropdown-Liste, aber sie ist immer leer.Verwendung von Fremdschlüsseln zum Abrufen von Daten || Laravel 5.3
Das ist mein ProjectController:
class ProjectController extends Controller
{
public function index(Request $request)
{
$projects = Project::orderBy('id','DESC')->paginate(5);
return view('projects.index',compact('projects'))
->with('i', ($request->input('page', 1) - 1) * 5);
}
public function create()
{
$domaines = Domaine::pluck('name', 'id');
return view('projects.create', compact('domaines'));
}
public function store(Request $request)
{
$domaine_id = Domaine::all()->pluck('name', 'id');
$this->validate($request, [
'title' => 'required',
'code' => 'required',
'domaine_id' => 'required'
]);
Project::create($request->all());
return redirect()->route('projects.index') //???? add compact or not ??
->with('success','Project created successfully');
}
public function show($id)
{
$project = Project::find($id);
return view('projects.show',compact('project'));
}
public function edit($id)
{
$project = Project::find($id);
return view('projects.edit',compact('project'));
}
public function update(Request $request, $id)
{
$this->validate($request, [
'title' => 'required',
'code' => 'required',
'domaine_id' => 'required'
]);
Project::find($id)->update($request->all());
return redirect()->route('projects.index')
->with('success','Project updated successfully');
}
public function destroy($id)
{
Project::find($id)->delete();
return redirect()->route('projects.index')
->with('success','Project deleted successfully');
}
}
und das ist show.blade.php:
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Domaine:</strong>
{{ $project->domaine_id }}
</div>
</div>
create.blade.php:
<select class="form-control" name="domaine_id">
@if (empty($domaine_id))
Whoops! Something went wrong
@else
@foreach($domaines as $domaine)
<option value="{{$domaine->id}}">{{$domaine->name}}</option>
@endforeach
@endif
</select>
Modell Project.php:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use App\Domaine;
class Pro extends Model
{
public $fillable = ['title','code','domaine_id'];
}
Migration: create_projects_table:
public function up()
{
Schema::create('projects', function (Blueprint $table) {
$table->increments('id', true);
$table->string('title');
$table->string('code');
$table->integer('domaine_id')->nullable();
$table->foreign('domaine_id')->references('id')->on('domaines');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('projects');
}
Jede Idee, warum die Liste immer leer ist? Ich habe Seeder so Tabellen in der DB sind nicht leer
Vielen Dank, das funktioniert. Nun, die Art, wie es Daten anzeigt, ist nicht das, was ich wirklich wollte (etwa so: {"Domaine": "Name_Domaine1", "ID" : 1}). Aber zumindest ist die Liste nicht mehr leer – Naj
Willkommen hoffe, es hilft dir. –