Laravel 迁移显示现有列不存在该列

Laravel migration shows column doesn't exist for existing columns

$users=DB::select('SELECT 
      users.id,
      users.name,
      course.id,
      course."courseUniqueName",
      skills.id,
      skills.skill,
      subjects.id,
      subjects.subject
       FROM users 
        LEFT JOIN course ON course."userId"=users.id
        LEFT JOIN skills ON skills."userId"=users.id
        LEFT JOIN subjects ON subjects."userId"= users.id'); 

我在迁移的 up 方法中写了上面的代码,但是当 运行 迁移命令时,它显示 -

Illuminate\Database\QueryException 
SQLSTATE[42703]: Undefined column: 7 ERROR:  column course.userid does not exist at character 294
HINT:  Perhaps you meant to reference the column "course.userId".

课程table迁移文件

Schema::create('course', function (Blueprint $table) {
                $table->id();
                $table->bigInteger('userId')->unsigned();
                $table->foreign('userId')->references('id')->on('users');
                $table->string('courseDisplayName');
                $table->string('courseUniqueName')->unique();
                $table->string('courseAddedBy');
                $table->dateTime('createdOn');
                $table->dateTime('lastUpdated');
                $table->softDeletes();        
            });

我不知道为什么会出现此错误,因为我的“课程”table 迁移中有 userId 列。非常感谢任何帮助。

编辑

输出:

"id": 1,
 "name": "weeee",
 "courseUniqueName": "Frehers course",
 "skill": "swim",
 "subject": "IELTS"

查看查询

DB::statement("
      CREATE VIEW course_market_view AS
      (
        SELECT 
          users.id as user_id,
          users.name,
          course.id as course_id,
          course.courseUniqueName,
          skills.id as skill_id,
          skills.skill,
          subjects.id as subject_id,
          subjects.subject
           FROM users 
            LEFT JOIN course ON course.'userId'=users.id
            LEFT JOIN skills ON skills.'userId'=users.id
            LEFT JOIN subjects ON subjects.'userId'= users.id       
      )
    ");

型号

class CourseMarketView extends Model
{
    use HasFactory;
    protected $table = 'course_market_view';
    protected $fillable = ['user_id','name','course_id','courseUniqueName','skill','skill_id','subject_id','subject'];
}

控制器

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;
use App\Models\CourseMarketView;

class CourseMarketController extends Controller
{
    public function getcoursebysubjectID(){

        $users = CourseMarketView::all();
        dd($users);
    }
}

提示是自己说的。您没有 userid

你的 table 是 userId

问题 A.“course.userid 列不存在”

HINT: Perhaps you meant to reference the column "course.userId"

这已通过对具有大写字母的字段名称使用 " 解决。

$users=DB::select('SELECT 
      users.id,
      users.name,
      course.id,
      course."courseUniqueName",
      skills.id,
      skills.skill,
      subjects.id,
      subjects.subject
       FROM users 
        LEFT JOIN course ON course."userId"=users.id
        LEFT JOIN skills ON skills."userId"=users.id
        LEFT JOIN subjects ON subjects."userId"= users.id'); 
  • 单引号查询
  • 字段名称周围的双引号

问题 B。id-字段

it's not fetching the data from the columns course.id,skills.id & subjects.id

问题是4个字段被命名为id

要修复它 - 使用字段别名:

$users=DB::select('SELECT 
      users.id as user_id, # note rename of the field here
      users.name,
      course.id as course_id, # and here
      course."courseUniqueName",
      skills.id as skill_id,  # and here
      skills.skill,
      subjects.id as subject_id,  # and here
      subjects.subject
       FROM users 
        LEFT JOIN course ON course."userId"=users.id
        LEFT JOIN skills ON skills."userId"=users.id
        LEFT JOIN subjects ON subjects."userId"= users.id'); 

这样id就会变成现实中的4个不同的字段:

  • user_id - 来自 table users
  • course_id - 来自 course
  • skill_id - 来自 skills
  • subject_id - 来自`subjects

根据字段重命名更改应用程序代码。