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
songs
oùid
= 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');
});
}
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.
$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)
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 .
protected $primaryKey = 'SongID';
Après avoir ajouté à mon modèle pour indiquer la clé primaire car elle prenait id (SongID) par défaut