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
songs
oùid
= 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');
});
}
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.
$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)
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.
protected $primaryKey = 'SongID';
après avoir ajouté à mon model pour indiquer la clé primaire parce qu'il prenait id (SongID) par défaut