Laravel 5 SQLSTATE [42S22]:未找到列:1054未知列' user_id'在'字段列表'

时间:2015-02-19 02:34:01

标签: authentication laravel eloquent laravel-5

当我尝试创建以用户身份登录的新项目时,我遇到了问题。 我的旧表'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))

它真的很奇怪,因为我没有在'项目'相关的任何文件中找到'user_id'。我检查了工作台,表格没问题。这是我调用store de project的函数:

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

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

似乎laravel存储了我的旧“项目”表,当我这样做时没有刷新。我已经将composer更新为dump-autoload,但错误仍然存​​在。以下是迁移文件中表创建的部分:

    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');
    }
}

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

我感谢任何相关的帮助。

1 个答案:

答案 0 :(得分:1)

这里的问题是 应该为您的项目表添加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,并且您的架构中需要它才能正常工作。