php требования SQLSTATE[42S22]: Столбец не найден: 1054 Неизвестный столбец 'id' в 'where clause'(SQL: select*from `songs` где` id`=5 limit 1)




laravel скачать (3)

protected $ primaryKey = 'SongID'; после добавления в мою модель, чтобы указать первичный ключ, он принимал id по умолчанию

Я пытаюсь получить конкретные данные из базы данных, используя столбец SongID когда пользователь нажимает на ссылку, но я получаю эту ошибку:

SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец 'id' в 'where clause' (SQL: выберите * из songs где id = 5 limit 1)

Класс контроллера:

<?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;
    }
}

Миграция:

    public function up()
    {
            Schema::create('songs', function($table)
            {
                $table->increments('SongID');
                $table->string('SongTitle')->index();
                $table->string('Lyrics')->nullable();
                $table->timestamp('created_at');
            });
    }

$song = DB::table('songs')->find($id);

здесь вы используете метод find($id)

для Laravel, если вы используете этот метод, вы должны иметь столбец с именем «id» и установить его как первичный ключ, чтобы затем вы могли использовать метод find()

в противном случае используйте where('SongID', $id) вместо find($id)


Когда вы используете find() , он автоматически предполагает, что ваш первичный столбец будет id . Чтобы это работало правильно, вы должны установить свой первичный ключ в своей модели.

Итак, в Song.php , внутри класса добавьте строку ...

protected $primaryKey = 'SongID';

Если есть какая-либо возможность изменить вашу схему, я бы настоятельно рекомендовал называть все ваши id столбцов первичных ключей, это то, что Laravel предполагает и, вероятно, спасет вас от головных болей в будущем.





laravel-5