我有两个表,一个用于用户,一个用于新项。我在items表的users表中引用了id。
public function up()
{
Schema::create('items', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->string('item_title');
$table->timestamps();
});
Schema::table('items', function($table) {
$table->foreign('user_id')->references('id')->on('users');
});
这是我添加新项目的控制器
public function storeItem(Request $request){
$user = Auth::user();
$item = new Item([
'user_id' => $user->id,
'item_title' => $request->input('title'),
]);
$item->save();
}
但是,当我提交表单时,我遇到此错误SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (
数据库.
项, CONSTRAINT
items_user_id_foreign FOREIGN KEY (
user_id ) REFERENCES
用户(
id { {1}}
有什么想法吗?
答案 0 :(得分:1)
好的,首先尝试修复您的迁移:
public function up()
{
Schema::create('items', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->string('title');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users')->onDelete('restrict');
});
}
public function down()
{
Schema::drop('items');
}
运行$ php artisan migrate:refresh
注意:使用前缀“item_”看起来很糟糕,您已经将表格命名为项目,因此请删除前缀...正确命名您的列
控制器(方法)
public function storeItem(Request $request, App\Item $item)
{
$user = $request->user(); // get current user making the request
$data = array_merge($request->only(['title']), ['user_id' => $user->id]);
$newItem = $item->create($data);
//$newItem has instance of your created item
}
注意:请记住在Item模型中正确填充
$fillable
数组(在这种情况下,它应该只有'title'
和'user_id'
)
答案 1 :(得分:0)
你有一个错字,它应该是:
$table->integer('user_id')->unsigned();
答案 2 :(得分:-1)
试试这段代码,
$ user = Auth :: user();
$ item = new Item([
'item_title'=> $请求 - >输入( '标题')
]);
$本期特价货品>用户() - >添加($用户);
$本期特价货品>保存();
您必须在项目模型中定义用户关系。
答案 3 :(得分:-1)
在你的项目模型中写下代码:
protected $table = 'items';
protected $fillable = ['user_id', 'title'];
然后尝试