Laravel验证规则,两个字段的组合必须唯一

时间:2019-09-10 10:15:40

标签: php laravel laravel-5 laravel-validation

我需要menuId和foodItem名称的组合唯一,但是食品ID是输入值

我尝试过

ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
            @Override
            public void onAvailable(@NonNull Network network) {
                Toast.makeText(MainActivity.this, "Request successful", Toast.LENGTH_LONG).show();
            }

            @Override
            public void onUnavailable() {
                super.onUnavailable();
                Toast.makeText(MainActivity.this, "No internet connection", Toast.LENGTH_LONG).show();
        }
        };
        final ConnectivityManager connectivityManager
                = (ConnectivityManager) MainActivity.this.getSystemService(Context.CONNECTIVITY_SERVICE);


        connectivityManager.registerNetworkCallback(new NetworkRequest.Builder()
                .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                .build(), networkCallback);

有趣的是,我已经回答了类似的问题here,但在这里却无法解决!

我也尝试过

 return [
            'foodItemId' => 'required|unique:food_items,id,' . 1 . ',menuId',
        ];

 'foodItemId' => [
             'required', 
             Rule::unique('food_items', 'id')->where(function($query) use($menu){
                 return $query->where('id', request()->input('foodItemId'))->where(function($qr) use($menu){
                     return $qr->where('menu_id', '!=', $menu);
                 });
             })
         ],

'foodItemId' => ['required', Rule::unique('food_items', 'id')->where(function ($query) use ($menu) {
                return $query->where('menu_id', '!=', $menu);
            })],

2 个答案:

答案 0 :(得分:0)

只需将不等于HKEY_CURRENT_USER\Software\Classes\myprotocol HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\ProtocolExecute\myprotocol 的值更改为等于!=

=

答案 1 :(得分:0)

我现在做了一个解决方法,希望我能得到一个更好的解决方案

public function rules()
    {
        $menu = $this->menu->id;
        return [
            'foodItemId' => function ($attribute, $value, $fail) use ($menu) {
                $foodItemName = FoodItem::find($value)->name;
                $validationStatus = FoodItem::where('name', $foodItemName)->where('menu_id', $menu)->get()->isNotEmpty();

                if ($validationStatus) {
                    $fail('This item is already in the menu.');
                }
            },
        ];
    }