如何在 laravel 5.6 中根据 id 检查唯一值?

  • 本文关键字:id 唯一 laravel php laravel-5
  • 更新时间 :
  • 英文 :


>我有一个表格,即子菜单

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,顺序 = 1,订单 = 2,但问题是顺序必须是唯一的。如果 menu_id = 1 中已经有 order = 1,则它必须显示错误消息"订单已存在"。

现在,下一个menu_id = 2也可以有订单= 1和订单= 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.
}

在执行某些操作之前,可以在控制器中运行 Select 查询

$order = Input::get('order');
$menu = Input::get('menu_id');
$var = DB::table('submenu')
->select('order','menu_id')
->where('order',$order)
->where('menu_id',$menu)
->first();
if(!empty($var)){
//Do Something for Duplicate Entry
} else {
//Do Something for Unique Entry;
}

最新更新