SQLSTATE [42S22]:未找到列:1054未知列' id'在' where子句' (SQL:select * from`songs`,其中`id` = 5 limit 1)

时间:2015-03-30 13:17:15

标签: php mysql laravel laravel-5

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

  

SQLSTATE [42S22]:未找到列:1054'where'中的未知列'id'   子句''(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');
            });
    }

5 个答案:

答案 0 :(得分:69)

当您使用find()时,它会自动假定您的主键列将是id。为了使其正常工作,您应该在模型中设置主键。

所以在Song.php中,在类中添加行...

protected $primaryKey = 'SongID';

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

答案 1 :(得分:5)

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

这里使用方法find($id)

对于Laravel,如果你使用这种方法,你应该有一个名为&#39; id&#39;的列。并将其设置为主键,这样您就可以使用方法find()

否则使用where('SongID', $id)代替find($id)

答案 2 :(得分:3)

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

,例如

protected $primaryKey = 'info_id';

此处info id是数据库表中可用的字段名称

可以在the docs的“主要关键字”部分找到更多信息。

答案 3 :(得分:0)

protected $primaryKey = 'SongID';

添加到我的模型后告诉主键,因为它默认采用id(SongID)

答案 4 :(得分:0)

我正在运行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();
        });
    

我希望这会有所帮助。