SQLSTATE [42S22]: colonne not found: 1054 Unknown column 'id' in 'where clause' (SQL: select * from 'songs` where' id` = 5 limit 1)

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

SQLSTATE[42S22]: colonne non trouvée: 1054 Colonne inconnue 'id' in ' où clause ' (SQL: select * from songsid = 5 Limite 1)

La Classe Controller:

<?php namespace AppHttpControllers;

use AppHttpRequests;
use AppHttpControllersController;

use IlluminateHttpRequest;
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');
            });
    }
21
demandé sur sanduniYW 2015-03-30 16:17:14

4 réponses

quand vous utilisez find(), il suppose automatiquement que votre colonne principale va être id. Pour que cela fonctionne correctement, vous devez configurer votre clé primaire dans votre modèle.

Song.php, dans la classe, ajouter la ligne...

protected $primaryKey = 'SongID';

S'il y a une possibilité de changer votre schéma, je vous recommande fortement de nommer toutes vos colonnes de clés primaires id, C'est ce que suppose Laravel et vous sauvera probablement de plus de maux de tête dans le route.

54
répondu user3158900 2015-03-30 13:28:52
$song = DB::table('songs')->find($id);

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

pour Laravel, si vous utilisez cette méthode, vous devriez avoir une colonne nommée " id " et le définir comme clé primaire, alors vous serez en mesure d'utiliser la méthode find()

autrement utiliser where('SongID', $id) au lieu de find($id)

5
répondu Valik Gubenko 2015-03-30 13:25:24

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

protected $primaryKey = 'info_id';

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

Vous trouverez plus d'informations dans la section "clés primaires" de la documentation.

2
répondu Manojkiran.A 2018-08-15 06:25:59

protected $primaryKey = 'SongID';

après avoir ajouté à mon model pour indiquer la clé primaire parce qu'il prenait id (SongID) par défaut

0
répondu GERARD KANDAGOR 2018-09-11 14:33:33