我刚刚开始拉扯,但我坚持这一点,我找不到办法做到这一点
基本上我插入一个带有类别的文章。
使用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保存到文章数据库中,但我的类别甚至没有插入,在我的调试栏上我得到了这个:
开始交易 select * from
batiments
其中(nom
='HI')限制1 回滚交易
我的帖子页面给了我这个错误:
SQLSTATE [23000]:完整性约束违规:1062 Duplicata du champ''pour la clef'batiments_nom_unique'(SQL:插入
batiments
()值())
有人知道如何插入或选择是否存在类别和插入是文章表中的id?
感谢
答案 0 :(得分:0)
category_id
您将此字段设置为索引,只需删除index()即可。标识字段必须只包含唯一记录,但您的"nativescript-dev-webpack": "^0.13.0",
可能会多次使用相同的值。
答案 1 :(得分:0)
代码:
$table->integer('categorie_id')->unsigned();
$table->foreign('categorie_id')->references('id')->on('categories');
Laravel支持创建外键约束,这些约束用于强制数据库级别的引用完整性。例如,让我们在articles表上定义一个categoriesie_id列,该列引用类别表上的id列 laravel.com/docs/5.4/migrations#foreign-key-constraints