web-dev-qa-db-fra.com

SQLSTATE [42S22]: Colonne introuvable: 1054 Colonne inconnue 'id' dans 'clause Where' (SQL: sélectionnez * parmi `chansons` où` id` = 5 limite 1)

J'essaie d'obtenir des données spécifiques de la base de données en utilisant la colonne SongID lorsqu'un utilisateur clique sur un lien, mais j'obtiens cette erreur: 

SQLSTATE [42S22]: Colonne introuvable: 1054 Colonne inconnue 'id' dans 'où clause '(SQL: sélectionnez * à partir de songsid = 5 limite 1)

La classe de contrôleur:

<?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

Lorsque vous utilisez find(), il suppose automatiquement que votre colonne de clé primaire sera id. Pour que cela fonctionne correctement, vous devez définir votre clé primaire dans votre modèle.

Donc, dans Song.php, dans la classe, ajoutez la ligne ...

protected $primaryKey = 'SongID';

S'il est possible de modifier votre schéma, je vous recommande vivement de nommer toutes vos colonnes de clé primaire id, c'est ce que Laravel suppose et vous épargnera probablement d'autres maux de tête.

62
user3158900
$song = DB::table('songs')->find($id);

ici vous utilisez la méthode find($id)

pour Laravel, si vous utilisez cette méthode, vous devez avoir la colonne nommée 'id' et la définir comme clé primaire. Vous pourrez alors utiliser la méthode find()

sinon, utilisez where('SongID', $id) au lieu de find($id)

5
Valik Gubenko

Il suffit d'aller au fichier modèle du contrôleur correspondant et de vérifier le nom de fichier de la clé primaire

tel que 

protected $primaryKey = 'info_id';

ici info id est le nom du champ disponible dans la table de base de données

Pour plus d’informations, reportez-vous à la section "Clés primaires" de the docs .

3
Manojkiran.A

protected $primaryKey = 'SongID'; 

Après avoir ajouté à mon modèle pour indiquer la clé primaire car elle prenait id (SongID) par défaut

0
GERARD KANDAGOR