【发布时间】:2019-04-22 19:34:35
【问题描述】:
我不确定这将如何工作,但我经常遇到这个问题。如果只有一个主键,我可以使用它,但有 2 个需要是唯一的。
每次创建新记录之前我都必须检查,是否没有 Laravel 魔法可以用来检查幕后是否已经存在类似的东西?
我不确定 Laravel 是否提供双向主键,我真的不知道要在他们的文档中寻找什么,但想知道是否可以提供帮助?
if (CourseEntry::where('course_id', $course->id)->where('user_id', Auth::user()->id)->count() < 1) {
CourseEntry::create([
'course_id' => $course->id,
'user_id' => Auth::user()->id,
'last_interaction' => Carbon::now(),
'started_at' => Carbon::now()
]);
}
我的User.php 中有一段关系可能会有所帮助?
public function courseEntries() {
return $this->hasMany('App\Models\CourseEntry');
}
【问题讨论】:
-
你知道任何 SQL 吗? Laravel 并不是为了消除对 SQL 和数据模型的担忧。是的,您可以在迁移中定义一个唯一键。在插入之前检查是否存在是一种反模式,而不是为了确保唯一性。
-
我了解 MySQL 支持唯一键,但它是否支持多个唯一键?我知道这是一个 SQL 问题,但它使用 Laravel 迁移蓝图系统,没有使用 SQL。
-
主键可以只有一个,可以用1列或多列来标识。可以有 多个唯一 键,由 1 列或更多列定义。 Laravel 迁移并不神奇,它与底层数据库引擎相关联,这使其成为与 SQL 相关的问题。您可以在迁移中定义这些键。