Laravel 5 SQLSTATE[42S22]:找不到列:1054 'field list' 中的未知列 'user_id'
Laravel 5 SQLSTATE[42S22]: Column not found: 1054 Unknown column 'user_id' in 'field list'
我在尝试创建一个以用户身份登录的新项目时遇到问题。
我的旧 table 'projects' 有一个名为 user_id 的专栏,我决定删除它,因为 laravel 5 会自动删除它。因此,我使用正确的项目 table(没有 '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'。我检查了 workbench 并且 table 没问题。这是我调用来存储项目的函数:
public function store(Request $request)
{
Auth::user()->projects()->create($request->all());
return Redirect::route('projects.index')->with('message', 'Project created!');
}
似乎 laravel 存储了我的旧 'projects' table 并且在我这样做时没有刷新。我已经将作曲家更新为自动转储,但错误仍然存在。这是迁移文件中 table 创建的部分:
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');
}
}
任务模型是一样的,除了关系部分。我使用默认的用户模型,只添加关系。
感谢任何相关帮助。
这里的问题是您应该为您的项目table设置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
,您的模式需要它才能工作。
我在尝试创建一个以用户身份登录的新项目时遇到问题。 我的旧 table 'projects' 有一个名为 user_id 的专栏,我决定删除它,因为 laravel 5 会自动删除它。因此,我使用正确的项目 table(没有 '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'。我检查了 workbench 并且 table 没问题。这是我调用来存储项目的函数:
public function store(Request $request)
{
Auth::user()->projects()->create($request->all());
return Redirect::route('projects.index')->with('message', 'Project created!');
}
似乎 laravel 存储了我的旧 'projects' table 并且在我这样做时没有刷新。我已经将作曲家更新为自动转储,但错误仍然存在。这是迁移文件中 table 创建的部分:
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');
}
}
任务模型是一样的,除了关系部分。我使用默认的用户模型,只添加关系。
感谢任何相关帮助。
这里的问题是您应该为您的项目table设置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
,您的模式需要它才能工作。