php - 如何根据 laravel 5.6 中的 id 检查唯一值?
问题描述
我有一张桌子,即子菜单
Schema::create('submenu', function (Blueprint $table) {
$table->increments('submenu_id');
$table->tinyInteger('status')->default(1);
$table->unsignedInteger('menu_id');
$table->string('name');
$table->tinyInteger('order');
$table->timestamps();
$table->foreign('menu_id')
->references('id')
->on('menu')
->onDelete('cascade');
});
在此表中,我们在文本框中输入顺序的值,即 1,2,3,4。这里,订单必须根据menu_id从1开始。就像,menu_id = 1 和 order = 1 和 order = 2,但问题是顺序必须是唯一的。如果 menu_id = 1 中已经有 order = 1,那么它必须显示“订单已存在”的错误消息。
现在,下一个menu_id = 2 也可以有order = 1 和order = 2。那么,如何根据menu_id 保持唯一值,并检查menu_id 是否包含该订单?
子菜单控制器
$order = Input::get('order');
$menu = Input::get('menu_id');
if($menu->contains($order)){
echo "exists";die;
} else {
echo "no exists";die;
}
我在控制器中使用过它,但它不起作用......
解决方案
创建两列的复合索引:
Schema::create('submenu', function (Blueprint $table) {
[...]
$table->unique(['menu_id', 'order']);
});
在控制器中,您可以像这样处理重复的组合:
try {
Submenu::create($data);
} catch(Exception $exception) {
// This combination of menu_id and order already exists.
}
推荐阅读
- regex - REGEX - 捕获除了指定的字符序列之外的所有内容
- r - 如何在 R 中以不同格式从 csv 创建网络图?
- regex - 正则表达式:匹配字符串,直到字符可能出现
- ansible - Ansible - 遍历嵌套字典(没有列表)
- sql - 从架构中的 SQL Server 表中提取数据
- html - 无法弄清楚如何使用网格模板区域对齐元素
- ruby - 从 Ruby 替换 YAML 占位符
- flutter - 当其中的代码仍然有效时,使用 Visibility 有什么好处
- apache-pig - 获取空输出
- http - KRB_AP_ERR_MODIFIED - Kerberos 失败,无法确定 SPN 问题