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
根据字段重命名更改应用程序代码。
$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
- 来自 tableusers
course_id
- 来自course
skill_id
- 来自skills
subject_id
- 来自`subjects
根据字段重命名更改应用程序代码。