webentwicklung-frage-antwort-db.com.de

SQLSTATE [42S22]: Spalte nicht gefunden: 1054 Unbekannte Spalte 'id' in 'where-Klausel' (SQL: Wählen Sie * aus `songs` aus, wobei 'id' = 5 limit 1 ist).

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, wobei id = 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');
            });
    }
25
Tartar

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.

62
user3158900
$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)

5
Valik Gubenko

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 .

3
Manojkiran.A

Ich lasse laravel 5.8 laufen und habe das gleiche Problem festgestellt. Die Lösung, die für mich funktioniert hat, lautet wie folgt:

  1. Ich habe bigIncrements ('id') verwendet, um meinen Primärschlüssel zu definieren.
  2. 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.

0
Kario Kevo

protected $primaryKey = 'SongID'; 

Nach dem Hinzufügen zu meinem Modell, um den Primärschlüssel mitzuteilen, da er standardmäßig die ID (SongID) hatte

0
GERARD KANDAGOR