php - Laravel 5.4 事务和一对多关系
问题描述
我刚开始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 保存到文章数据库中,但我的类别甚至没有插入,在我的调试栏上我有这个:
Begin Transaction select * from
batiments
where (nom
='HI') limit 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
可能多次具有相同的值。
推荐阅读
- c++ - 是否保证 bool 的按位“和”不会短路?
- r - R - 绘制时间序列数据时出现无法解释的尖峰
- tensorflow - 为什么 TensorFlow Lite 比桌面版 TensorFlow 慢?
- php - 如何在 Laravel 中管理大量相关数据(类别、标签、菜单)?
- c# - 如何使用 LINQ 通过使用条件的子字符串对文件名进行排序?
- c++ - 在不能应用 omp atomic/reduction 的情况下,我们可以使用 omp critical 来提高效率吗?
- vagrant - 每次 vagrant reload 都会删除更改吗?
- scala - 使用 circe 时如何在 Scala 中表示动态 JSON 键
- regex - 使用 UAM(用户访问管理器)插件在 Wordpress 站点中访问带有大写字母的文件时出错
- java - 如何将准备好的语句从电子表格行项目循环到 derby 数据库