Laravel 5 SQLSTATE[42S22]:找不到列:1054“字段列表”中的未知列“user_id”

问题描述 投票:0回答:1

当我尝试创建以用户身份登录的新项目时遇到问题。 我的旧表“projects”有一个名为 user_id 的列,我决定删除它,因为 laravel 5 会自动执行此操作。因此,我使用正确的项目表(没有“user_id”列)刷新迁移,但是当我尝试创建新项目时,出现此错误:

QueryException in Connection.php line 614:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'user_id' in 'field list' (SQL: insert into `projects` (`name`, `slug`, `user_id`, `updated_at`, `created_at`) values (Project 1, project-1, 1, 2015-02-18 23:36:28, 2015-02-18 23:36:28))

这真的很奇怪,因为我在任何与“projects”相关的文件中都没有找到“user_id”。我检查了工作台,桌子没问题。这是我调用来存储项目的函数:

    public function store(Request $request)
    {
        Auth::user()->projects()->create($request->all());

        return Redirect::route('projects.index')->with('message', 'Project created!');
    }

laravel 似乎存储了我旧的“项目”表,并且在我执行此操作时没有刷新。我已经将作曲家更新为转储自动加载,但错误仍然存在。这是迁移文件上建表的部分:

    Schema::create('projects', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('name');
        $table->string('slug');
        $table->timestamps();
    });

没有“user_id”列。这是我的项目模型:

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Project extends Model {
    protected $table = 'projects';

    protected $guarded = [];

    public function tasks()
    {
        return $this->hasMany('App\Task');
    }
    public function users()
    {
        return $this->belongsTo('App\User');
    }
}

除了关系部分之外,任务模型是相同的。我使用默认的用户模型,仅添加关系。

我感谢任何相关帮助。

php laravel authentication laravel-5 eloquent
1个回答
3
投票

这里的问题是您的项目表应该

user_id
列。 Laravel 不会自动更改您的数据库架构

跑步时:

Auth::user()->projects()->create($request->all());

Laravel 尝试做类似的事情:

Project::create(array_merge($request->all(), 'user_id' => Auth::user()->id));

因此 Laravel 会尝试将新创建的项目分配给您给他的用户(在本例中为

Auth::user()
)。因此,在这种情况下,您需要有
user_id
列,因为您甚至定义了关系:

public function users()
{
    return $this->belongsTo('App\User');
}

因此将项目绑定到用户的默认列将是

user_id
,并且您的架构需要它才能工作。

© www.soinside.com 2019 - 2024. All rights reserved.