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
songsoù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