SQLSTATE[42S22]:未找到列:1054 “where 子句”中的未知列“id”(SQL:从“歌曲”中选择 *,其中“id” = 5 限制 1)

2022-08-30 11:57:50

当用户单击链接时,我正在尝试使用列从数据库中获取特定数据,但我收到此错误:SongID

SQLSTATE[42S22]: 未找到列: 1054 “where 子句” 中的未知列 'id' (SQL: select * from where = 5 limit 1)songsid

控制器类:

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

如果有任何更改架构的可能性,我强烈建议您命名所有主键列,这是Laravel所假设的,并且可能会让您免于更多的麻烦。id


答案 2

只需转到相应控制器的模型文件并检查主键字段名称

protected $primaryKey = 'info_id';

这里 信息 ID 是数据库表中可用的字段名称

有关详细信息,请参阅文档的“主键”部分。


推荐