我刚开始使用laravel,但是我仍然坚持这一点,但我找不到解决方法
基本上,我插入带有类别的文章。
使用select2,可以选择一个现有类别或创建一个新类别。
我的文章模型:
public function category(){
return $this->belongsTo('App\Category');
}
我的类别模型:
public function articles(){
return $this->hasMany('App\Article');
}
我的文章迁移:
public function up()
{
Schema::create('articles', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->longText('content')->nullable();
$table->timestamps();
});
}
我的类别迁移:
Schema::create('categories', function (Blueprint $table) {
$table->increments('id');
$table->string('nom')->unique();
});
Schema::table('articles', function(Blueprint $table){
$table->integer('category_id')->unsigned()->index();
});
最后是我的控制器功能,用于存储文章(我想使用事务):
public function store(Request $request)
{
$this->validate($request, [
'numero' => 'required',
'category' => 'required',
'title' => 'required'
]);
$article = new Article();
DB::transaction(function() use ($request) {
$category = Category::firstOrCreate(['nom' => $request->input('category')]);
$article->title = $request->input('title');
$article->save();
});
return response()->json([
'title' => $article->title
]);
}
所以我知道我没有将类别ID保存到article db中,但是我的类别甚至没有插入,在调试栏中我得到了以下信息:
开始交易
从
batiments
中选择*其中(nom
='HI')限制1回滚交易
我的帖子页面给我这个错误:
SQLSTATE [23000]:违反完整性约束:1062 Duplicata du champ''pour la clef'batiments_nom_unique'(SQL:插入
batiments
()值())有人知道如何在商品表中插入或选择是否存在类别并插入ID?
谢谢
最佳答案
$table->integer('category_id')->unsigned()->index();
您将此字段设置为索引,只需删除index()。标识字段必须仅具有唯一记录,但是您的category_id
可能具有相同的值很多次。