php - updateOrCreate 向 laravel 8 中名为“id”的属性和原始数组添加一列
问题描述
喜欢表迁移代码
$table->primary(['user_id', 'post_id']);
$table->foreignId('user_id');
$table->foreignId('post_id');
$table->boolean('liked');
$table->timestamps();
$table->foreign('user_id')
->references('id')
->on('users')
->onDelete('cascade');
$table->foreign('post_id')
->references('id')
->on('posts')
->onDelete('cascade');
$table->unique(['user_id', 'post_id']);
喜欢后雄辩的关系
public function likes()
{
return $this->hasMany(Like::class);
}
像功能码
public function like($user = null, $liked = true)
{
$this->likes()->updateOrCreate(
[
'user_id' => $user ? $user->id : auth()->id(),
],
[
'liked' => $liked
]
);
}
当我 var_dump updateOrCreate 我得到:
App\Models\Like {#1248 ▼
#guarded: []
#connection: "mysql"
#table: "likes"
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
+preventsLazyLoading: false
#perPage: 15
+exists: true
+wasRecentlyCreated: true
#attributes: array:6 [▼
"user_id" => 1
"post_id" => 11
"liked" => true
"updated_at" => "2021-07-17 00:16:15"
"created_at" => "2021-07-17 00:16:15"
"id" => 0
]
#original: array:6 [▼
"user_id" => 1
"post_id" => 11
"liked" => true
"updated_at" => "2021-07-17 00:16:15"
"created_at" => "2021-07-17 00:16:15"
"id" => 0
]
#changes: []
#casts: []
#classCastCache: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#hidden: []
#visible: []
#fillable: []
}
如您所见,有一个 id 元素,我不知道它来自哪里。
注意。
- 当我第一次运行like函数时,它运行正确(它将记录添加到表中)
- 当我再次运行它失败并给我这个mysql错误:
SQLSTATE [42S22]:未找到列:1054 'where 子句'中的未知列 'id'(SQL:更新likes
集liked
= 1 likes
,. updated_at
= 2021-07-17 00:20:29 where id
is null)
编辑:
- 当我手动将 id 元素添加到 likes 表时,它可以工作。
解决方案
那将是like
正在创建的实际模型的 ID。user
虽然你在和之间有关系post
。like
正在创建的模型仍然需要它自己的id
用于在 eloquent 中引用。如主键文档中所述。
Eloquent 还会假设每个模型对应的数据库表都有一个名为 id 的主键列。
将 id 列添加到您的 like 表将解决问题,这可以通过id
在迁移中使用 * 方法来完成。
Schema::create('likes', function (Blueprint $table) {
$table->id();
});
推荐阅读
- scala - 将 Spark DataFrame 架构转换为新架构
- django - 如何在 Django 中实现两个具有彼此外键关系的抽象模型?
- java - 有没有办法对时间限制进行编码?
- python - 带有非默认 Visual Studio 的 cvxopt 自定义安装
- javascript - 字符串到 JSON 数组
- regex - python 正则表达式:如何提取 'A =BC= D' -> 'BC'
- javascript - 如何在 MongoDB 中将嵌套对象显示为超级对象?
- java - JPA:2个数组列表到1个数据库表中
- android - 如何将文件下载到Android中的内部下载文件夹中
- html - 更改 R Shiny textInput 指令的字体系列/大小/样式