Laravel 5 Confirmation of a unique passpass variable

Is it possible to pass a unique verification method additionally, where are the clauses with a variable?

Here is an example:

In my model, I have validation rules.

public static $rules = array(
    'amount'    => 'required|numeric',
    'user_id'   => 'required|exists:users,id',
    'cause_id'  => 'required|exists:causes,id',
    'circle_id' => 'required|unique:donations,circle_id,NULL,id,cause_id,:cause_id',
);

And then in my controller I run:

$input = array(
    'amount'    => Input::get('amount'),
    'user_id'   => $this->currentUser->id,
    'cause_id'  => $cause->id,
    'circle_id' => Input::get('circle_id')
);

$validator = Validator::make($input, Donation::$rules);

How can I get the reason_id in a validation rule without concatenation? As you can see from the array of rules, I tried the PDO: placeholder style, but the request is executed as: select count(*) as aggregate from donations where circle_id = '500' and cause_id = ':cause_id'

+4
source share
4 answers

My suggestion in your case would be to wrap your rules in a function:

public static function rules($causeId)
{
    return array(
        'amount'    => 'required|numeric',
        'user_id'   => 'required|exists:users,id',
        'cause_id'  => 'required|exists:causes,id',
        'circle_id' => 'required|unique:donations,circle_id,NULL,id,cause_id,' . $causeId,
    );
}

And then call your function, passing your value:

$validator = Validator::make($input, Donation::rules($yourCauseId));

, , , . , , .

+2

Laravel " " :

, "where" :

'email' => 'unique:users,email_address,NULL,id,account_id,1'

account_id of 1.

, , , :

'circle_id' => 'required|unique:donations,circle_id,NULL,id,cause_id,'.$causeId,

, :

'circle_id' => [
    'required',
    'unique:donations,circle_id,NULL,id,cause_id,'.$causeId,
],
+1

Laravel 5, "public functions rules()" FormRequest:

<?php 
namespace your-namespace;

use Illuminate\Foundation\Http\FormRequest;
class MyFormRequest extends FormRequest {

    public function rules() {
       return [
          'field'    => 'required|unique:table,column,user_id,' . $this->input('field-or-whatever-you-need-from-request'),
       ];
    }
}
?>
+1

, , , .

protected $rules = array(
    "id" => 'unique_custom:data_groups,id,id=GroupId'
);

Laravel:

public function getGroupIdAttribute() {
    return $this->id;
}

:

    \Illuminate\Support\Facades\Validator::extend('unique_custom', '\Module\UniqueDataValidator@validate');

src :

            <?php

            namespace Module;

            use Illuminate\Database\Eloquent\Model;
            use Illuminate\Support\Facades\Cache;
            use Illuminate\Support\Facades\DB;
            use Illuminate\Support\Facades\Validator;
            use Illuminate\Validation\Concerns\ValidatesAttributes as ValidatesAttributes;
            use Illuminate\Validation\Rules\Unique;

            class UniqueDataValidator extends Validator
            {

                use ValidatesAttributes;

                protected $custom_messages = array(
                    'unique_custom' => 'The :attribute field must be unique',
                );


                /**
                 * Validate the uniqueness of an attribute value on a given database table.
                 *
                 * If a database column is not specified, the attribute will be used.
                 *
                 * @param  string  $attribute
                 * @param  mixed   $value
                 * @param  array   $parameters
                 * @return bool
                 */
                public function validate($attribute, $value, $parameters, $validator)
                {

                    $this->requireParameterCount(3, $parameters, 'unique_custom');

                    list($connection, $table) = $this->parseTable($parameters[0]);
                    $input    = $validator->getData(); // All attributes

                    $column = $this->getQueryColumn($parameters, $attribute);

                    $param1 = explode("=", $parameters[1]);
                    $value = $input[$param1[0]]; // Set value to attribute value

                    $exclude = [];
                    if (isset($parameters[2])) {
                        $exclude_values = explode("=", $parameters[2]);
                        $exclude_value = @$input[$exclude_values[0]];

                        if (!is_null($exclude_value)) {
                            $exclude_id = $exclude_values[0];
                            $exclude_value = $input[$exclude_values[0]];

                            if (!is_null($exclude_value)) {
                                $exclude[$exclude_values[0]] = $exclude_value;
                            }
                        }
                    }

                    $query = DB::table("$table")->where($column, '=', $value);

                    foreach ($exclude as $key => $value) {
                        $query->where(function ($query) use ($key, $value) {
                                $query->where($key, '!=', $value);
                        });
                    }

                    $validator->setCustomMessages($this->custom_messages);

                    return $query->count() == 0;

                }


            }

, , Laravel:

use ValidatesAttributes;
$this->validateUnique($attribute, $value, $parameters);
0

All Articles