SQLSTATE[42S22]:열을 찾을 수 없음: 1054 'where 절'의 'id' 알 수 없는 열(SQL: 'id'에서 * 선택 = 5 제한 1)
열을 사용하여 데이터베이스에서 특정 데이터를 가져오려고 합니다.SongID
사용자가 링크를 클릭했지만 다음 오류가 발생한 경우:
SQLSTATE[42S22]:열을 찾을 수 없음: 'where' 절에서 1054 알 수 없는 열 'id'(SQL: select * from
songs
어디에id
5 제한 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을 실행하고 있으며 같은 문제를 경험했습니다.저에게 효과가 있었던 해결책은 다음과 같습니다.
- bigIncrements('id')를 사용하여 기본 키를 정의했습니다.
서명되지 않은 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
'programing' 카테고리의 다른 글
알파벳을 어떻게 반복합니까? (0) | 2023.07.22 |
---|---|
구성 맵 kubernetes 여러 환경 (0) | 2023.07.22 |
생성자 기능 대 공장 기능 (0) | 2023.07.22 |
Python: 지정된 날짜의 시작 및 끝 데이터 제공 (0) | 2023.07.22 |
왜 RabbitMQ 대신 셀러리를 사용합니까? (0) | 2023.07.22 |