programing

SQLSTATE[42S22]:열을 찾을 수 없음: 1054 'where 절'의 'id' 알 수 없는 열(SQL: 'id'에서 * 선택 = 5 제한 1)

shortcode 2023. 7. 22. 13:36
반응형

SQLSTATE[42S22]:열을 찾을 수 없음: 1054 'where 절'의 'id' 알 수 없는 열(SQL: 'id'에서 * 선택 = 5 제한 1)

열을 사용하여 데이터베이스에서 특정 데이터를 가져오려고 합니다.SongID사용자가 링크를 클릭했지만 다음 오류가 발생한 경우:

SQLSTATE[42S22]:열을 찾을 수 없음: 'where' 절에서 1054 알 수 없는 열 'id'(SQL: select * fromsongs어디에id5 제한 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');
            });
    }

사용할 때find()자동으로 기본 키 열이id이 작업이 올바르게 작동하려면 모델에 기본 키를 설정해야 합니다.

소인Song.php클래스 내에 행을 추가합니다...

protected $primaryKey = 'SongID';

스키마를 변경할 가능성이 있다면 모든 기본 키 열에 이름을 지정하는 것이 좋습니다.id그것은 라라벨이 가정하는 것이고 아마도 앞으로 더 많은 두통으로부터 당신을 구해줄 것입니다.

해당 컨트롤러의 모델 파일로 이동하여 기본 키 파일 이름을 확인합니다.

예를 들어

protected $primaryKey = 'info_id';

여기 정보 ID는 데이터베이스 테이블에서 사용할 수 있는 필드 이름입니다.

자세한 내용은 문서의 "기본 키" 섹션에서 확인할 수 있습니다.

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

여기서 당신은 방법을 사용합니다.find($id)

Laravel의 경우 이 방법을 사용할 경우 'id'라는 열을 기본 키로 설정해야 합니다. 그러면 method를 사용할 수 있습니다.find()

다른 용도로.where('SongID', $id)대신에find($id)

protected $primaryKey = 'SongID';

기본적으로 id(SongID)를 가져갔기 때문에 기본 키를 알려주기 위해 모델에 추가한 후

저는 larvel 5.8을 실행하고 있으며 같은 문제를 경험했습니다.저에게 효과가 있었던 해결책은 다음과 같습니다.

  1. bigIncrements('id')를 사용하여 기본 키를 정의했습니다.
  2. 서명되지 않은 Big를 사용했습니다.외부 참조 키를 정의하는 정수('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();
        });
    

이것이 도움이 되길 바랍니다.

위에서 언급한 대로 DB::table을 사용할 수 있지만 'find'는 사용할 수 없습니다.

\Illuminate\Support\Facades\DB::table('model_has_roles')->where('model_id', 123)->update(['role_id' => 2]);

언급URL : https://stackoverflow.com/questions/29347253/sqlstate42s22-column-not-found-1054-unknown-column-id-in-where-clause-s

반응형