Ich versuche, bestimmte Daten aus der Datenbank abzurufen, indem Sie die Spalte SongID
verwenden, wenn ein Benutzer auf einen Link klickt. Ich erhalte jedoch diese Fehlermeldung:
SQLSTATE [42S22]: Spalte nicht gefunden: 1054 Unbekannte Spalte 'id' in 'wobei Klausel '(SQL: select * from
songs
, wobeiid
= 5 limit 1 ist)
Die Controller-Klasse:
<?php namespace App\Http\Controllers;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use DB;
class SongsController extends Controller {
public function index()
{
$name = $this->getName();
$songs = DB::table('songs')->get();
return view('songs.index', compact('songs','name'));
}
public function show($id)
{
$name = $this->getName();
$song = DB::table('songs')->find($id);
return view('songs.show', compact('song','name'));
}
private function getName()
{
$name = 'Tupac Amaru Shakur';
return $name;
}
}
Migration:
public function up()
{
Schema::create('songs', function($table)
{
$table->increments('SongID');
$table->string('SongTitle')->index();
$table->string('Lyrics')->nullable();
$table->timestamp('created_at');
});
}
Wenn Sie find()
verwenden, wird automatisch davon ausgegangen, dass Ihre Primärschlüsselspalte id
ist. Damit dies korrekt funktioniert, sollten Sie Ihren Primärschlüssel in Ihrem Modell festlegen.
Fügen Sie also in Song.php
innerhalb der Klasse die Zeile hinzu ...
protected $primaryKey = 'SongID';
Wenn es eine Möglichkeit gibt, Ihr Schema zu ändern, würde ich dringend empfehlen, alle Primärschlüsselspalten mit id
zu benennen. Dies ist, was Laravel annimmt, und wird Sie wahrscheinlich vor weiteren Kopfschmerzen schützen.
$song = DB::table('songs')->find($id);
hier benutzt du die Methode find($id)
wenn Sie diese Methode verwenden, sollten Sie für Laravel eine Spalte mit dem Namen 'id' haben und diese als Primärschlüssel festlegen. In diesem Fall können Sie die Methode find()
verwenden.
ansonsten verwenden Sie where('SongID', $id)
anstelle von find($id)
Gehen Sie einfach zur Modelldatei des entsprechenden Controllers und prüfen Sie den Namen des Primärschlüssels
sowie
protected $primaryKey = 'info_id';
hier ist die Info-ID in der Datenbanktabelle verfügbar
Weitere Informationen finden Sie im Abschnitt "Primärschlüssel" in the docs .
Ich lasse laravel 5.8 laufen und habe das gleiche Problem festgestellt. Die Lösung, die für mich funktioniert hat, lautet wie folgt:
Ich habe unsignedBigInteger ('user_id') verwendet, um den Fremdschlüssel zu definieren, auf den verwiesen wird.
Schema::create('generals', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('general_name');
$table->string('status');
$table->timestamps();
});
Schema::create('categories', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('general_id');
$table->foreign('general_id')->references('id')->on('generals');
$table->string('category_name');
$table->string('status');
$table->timestamps();
});
Ich hoffe das hilft.
protected $primaryKey = 'SongID';
Nach dem Hinzufügen zu meinem Modell, um den Primärschlüssel mitzuteilen, da er standardmäßig die ID (SongID) hatte