web-dev-qa-db-ja.com

SQLSTATE [42S22]:列が見つかりません:1054不明な列 'id' 'where句'(SQL:select * from `songs` where` id` = 5 limit 1)

ユーザーがリンクをクリックしたときに列SongIDを使用してデータベースから特定のデータを取得しようとしていますが、このエラーが発生しています:

SQLSTATE [42S22]:列が見つかりません:1054不明な列 'id' in 'where句'(SQL:select * from songs where 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');
            });
    }
26
Tartar

find()を使用すると、主キー列がidになると自動的に想定されます。これが正しく機能するためには、モデルに主キーを設定する必要があります。

したがって、Song.phpで、クラス内に次の行を追加します...

protected $primaryKey = 'SongID';

スキーマを変更する可能性がある場合は、すべてのプライマリキー列にidという名前を付けることを強くお勧めします。これはLaravelが想定していることであり、今後の頭痛の種から解放されます。

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

ここでは、メソッドfind($id)を使用します

laravelの場合、このメソッドを使用する場合、「id」という名前の列があり、それを主キーとして設定する必要があります。そのため、メソッドfind()を使用できます。

それ以外の場合は、where('SongID', $id)の代わりにfind($id)を使用します

5
Valik Gubenko

対応するコントローラーのモデルファイルに移動し、主キーのファイル名を確認するだけです

といった

protected $primaryKey = 'info_id';

ここで、情報IDはデータベーステーブルで使用可能なフィールド名です

詳細については、 ドキュメント の「プライマリキー」セクションを参照してください。

3
Manojkiran.A

私は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();
        });
    

これがお役に立てば幸いです。

0
Kario Kevo

protected $primaryKey = 'SongID';

デフォルトでid(SongID)を使用していたため、主キーを伝えるためにモデルに追加した後

0
GERARD KANDAGOR