laravel - 有没有办法在 Laravel 中静默中止创建模型?
问题描述
我有一个 ProductTags 模型,它与我的产品存在一对多关系。我需要防止相同的模型 ID 和标签在多个记录中重复。在我的迁移中,$table->unique(['product_uuid', 'tag']);
但这意味着如果我尝试创建一个与现有模型重复的模型,我会违反完整性约束。
因此,当创建 ProductTags 模型时,在保存它之前,它需要检查数据库中的现有版本,然后中止自己的创建。我更愿意在模型中执行此操作,因此我只需实现一次,而不是控制器和工厂。
我试图重写create方法来拦截它,但是当我播种时,它似乎根本没有被调用。
class ProductTag extends Model
{
protected $fillable = [
'product_uuid', 'tag',
];
public function create($data){
if(
ProductTag::where('product_uuid', '=', $data['product_uuid'])->
where('tag','=', $data['tag'])
){
return false;
}
return parent::create($data);
}
}
解决方案
public function create($data)
{
return self::firstOrCreate( // self or use ProductTag
[
'product_uuid' => $data['product_uuid'],
'tag' => $data['tag']
],
$data
);
}
我只是不确定你是否可以在 上调用它self
,但你肯定可以在模型上调用它。
这将ProductTag
在任何情况下返回一个 back 实例,因此您可以链接其他方法
推荐阅读
- typescript - 如何使用 TypeScript 确保部分具有给定字段?
- html - 如何在 flex-direction: 列 CSS 的上下文中使 (nodeType == Node.ELEMENT_NODE) 的行为类似于 (nodeType == Node.TEXT_NODE)
- docker - 将 WebAgent 作为 docker 容器启动
- angular - 由于 Chrome 与 Chromedriver 版本不匹配,Angular e2e 测试在 GitHub 操作中失败
- php - 我的联系表单脚本ajax php jquery没有响应
- java - 如何在 Java 中显示返回多行的 SQL 查询
- python - 如何与使用 python pickle 模块保存的 ML 模型进行交互?
- sql - 通过查询将访问组转换为 sql server 查询
- ios - 如何在 SwiftUI 中居中裁剪图像
- python - 试图完成一个代码来编译两个字符.com域的列表,包括python的数字0-9