php - unknown - SQLSTATE[42S22]: Columna no encontrada: 1054 Columna desconocida ''id'' en ''where clause''(SQL: seleccione*de `songs` donde` id`=5 limit 1)
updateorcreate laravel (3)
Estoy tratando de obtener datos específicos de la base de datos utilizando la columna SongID
cuando un usuario hace clic en un enlace, pero recibo este error:
SQLSTATE [42S22]: Columna no encontrada: 1054 Columna desconocida ''id'' en ''where clause'' (SQL: select * from
songs
dondeid
= 5 limit 1)
La clase de controlador:
<?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;
}
}
Migración:
public function up()
{
Schema::create(''songs'', function($table)
{
$table->increments(''SongID'');
$table->string(''SongTitle'')->index();
$table->string(''Lyrics'')->nullable();
$table->timestamp(''created_at'');
});
}
Cuando utiliza find()
, automáticamente asume que su columna de clave principal va a ser id
. Para que esto funcione correctamente, debe establecer su clave principal en su modelo.
Entonces en Song.php
, dentro de la clase, agregue la línea ...
protected $primaryKey = ''SongID'';
Si hay alguna posibilidad de cambiar su esquema, recomiendo encarecidamente nombrar todas las id
columnas de clave principal, es lo que Laravel supone y probablemente lo salve de más dolores de cabeza en el futuro.
$song = DB::table(''songs'')->find($id);
aquí usas el método find($id)
para Laravel, si usa este método, debe tener una columna llamada ''id'' y establecerla como clave principal, entonces podrá usar el método find()
de lo contrario, use where(''SongID'', $id)
lugar de find($id)
protected $ primaryKey = ''SongID''; después de agregar a mi modelo para que diga la clave primaria porque estaba tomando la identificación por defecto