首页 > 解决方案 > 如何根据 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;
        }

我在控制器中使用过它,但它不起作用......

标签: phplaravel-5

解决方案


创建两列的复合索引:

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.
}

推荐阅读