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

Я пытаюсь получить конкретные данные из базы данных, используя столбец 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');
            });
    }

Ответ 1

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

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

protected $primaryKey = 'SongID';

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

Ответ 2

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

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

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

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

Ответ 3

Просто зайдите в файл модели соответствующего контроллера и проверьте имя поля первичного ключа

такие как

protected $primaryKey = 'info_id';

здесь info id - это имя поля, доступное в таблице базы данных

Дополнительную информацию можно найти в разделе "Основные ключи" документации.

Ответ 4

protected $primaryKey = 'SongID';

После добавления в мою модель сказать первичный ключ, потому что он по умолчанию принимает идентификатор (SongID)

Ответ 5

извините может помочь эта ошибка

Неустранимая ошибка: необработанное исключение "PDOException" с сообщением "SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец" id "в" предложении where "в C:\xampp\server\swiss_pearl\vendor\j4mie\idiorm\idiorm. php: 505 Трассировка стека: # 0 C:\xampp\server\swiss_pearl\vendor\j4mie\idiorm\idiorm.php(505): PDOStatement-> execute() # 1 C:\xampp\server\swiss_pearl\vendor\j4mie\idiorm\idiorm.php(1909): ORM :: _ execute ('SELECT * FROM'... ', Array,' default ') # 2 C:\xampp\server\swiss_pearl\vendor\j4mie\idiorm\idiorm.php(687): ORM-> _ run() # 3 C:\xampp\server\swiss_pearl\inc\lib.functions.php(34): ORM-> find_one (Array) # 4 C:\xampp\server\swiss_pearl\md_client-edit.php(11): get_item (Array, 'medical_clients') # 5 {main}, брошенный в C:\xampp\server\swiss_pearl\vendor\j4mie\idiorm\idiorm.php в строке 505

Ответ 6

Я использую Laravel 5.8, и у меня возникла та же проблема. Решение, которое сработало для меня, заключается в следующем:

  1. Я использовал bigIncrements ('id'), чтобы определить мой первичный ключ.
  2. Я использовал unsignedBigInteger ('user_id') для определения внешнего ссылочного ключа.

        Schema::create('generals', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('general_name');
            $table->string('status');
            $table->timestamps();
        });
    
    
        Schema::create('categories', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('general_id');
            $table->foreign('general_id')->references('id')->on('generals');
            $table->string('category_name');
            $table->string('status');
            $table->timestamps();
        });
    

Я надеюсь, что это поможет.