Laravel - Database - unique data only from the logged-in user id

Asked

Viewed 98 times

1

I’m having a problem in Laravel, in checking the unique data, I want you to check whether data is unique only in user id.

inserir a descrição da imagem aqui

I have a table called empresas_cadastradas, and what I want you to do is for example type the name of the company Sougamerrr, and with this he will do the validation and will see if in the column id = 3 in the column name there is the name of the company and will return the error saying that already exists. But what happens is, it ignores id 3 and checks on others and thus updates even existing.

My code used:

 case 'PUT':
    case 'PATCH':
    {
         return[
        'nome' => 'required|string|max:150|unique:empresas_cadastradas,id,'.Auth::id(),
        'email_principal' => 'required|string|email|max:80|unique:empresas_cadastradas,email_principal,'.Auth::id(),
        'telefone'    => 'string|max:25|required',
        'celular'    => 'string|max:25|required',
        'endereco'    => 'string|max:150|required',
        'numero'    => 'string|max:25|required',
        'bairro'    => 'string|max:100|required',
        'complemento'    => 'string|max:150|required',
        'cnpj'    => 'string|max:20|unique:empresas_cadastradas,cnpj,'.Auth::id(),
        'resumo'    => 'required|string|max:500|required',
        'avatar' => 'image|mimes:jpeg,png,jpg,svg|max:2048',
    ];

    }

1 answer

1

I managed to solve the problem, I will be leaving the resolution.

in Appserviceprovider.php add this code.

public function boot(){

  /*
|--------------------------------------------------------------------------
| UNICO ID
|--------------------------------------------------------------------------
|
| verifica no banco de dados se existe os dados somente do usuario logado
|  $atribute == nome do campo input(name) - Valor vem automatico
|  $value == valor do name($atribute) - Valor vem automatico
| $parameters == sao os parametros como por exemplo:
| uniqui_for_id_all:primeiro_parametro,valor_primeiro_parametro
| 
|
*/
     Validator::extend('uniqui_for_id', function($attribute, $value, $parameters) {

        $existe = DB::table($parameters[0])->where([
            [$parameters[1], '=', $parameters[2]],
            [$parameters[3], '!=', $parameters[4]],
            [$attribute, '=',  $value]
        ])->first();

        if(!$existe){
            return true;
        }else{
            return false;
        }
    });

             /*
|--------------------------------------------------------------------------
| UNICO ID
|--------------------------------------------------------------------------
|
| verifica no banco de dados se existe os dados comparando com todos execao 
| ele mesmo
| 
|
*/

     Validator::extend('uniqui_for_id_all', function($attribute, $value, $parameters) {


        $existe = DB::table($parameters[0])->where([
            [$parameters[1], '!=', $parameters[2]],
            [$attribute, '=',  $value]
        ])->first();

        if(!$existe){
            return true;
        }else{
            return false;
        }
    });
}

}

And in your validation file (REQUEST) of the fields add:

uniqui_for_id:NOME_DO_BANCO_DE_DADOS,PRIMEIRA_COLUNA_NOME,PRIMEIRA_COLUNA_VALOR,SEGUNDA_COLUNA_NOME,SEGUNDA_COLUNA_VALOR

In the second validation:

uniqui_for_id:NOME_DO_BANCO_DE_DADOS,PRIMEIRA_COLUNA_NOME,PRIMEIRA_COLUNA_VALOR

and go to lang/en or /lang/pt_br (the defined language)-> validation.php

add:

 'custom' => [
    'nome' => [
        'uniqui_for_id' => 'O campo :attribute já está sendo utilizado.',
        'uniqui_for_id_all' => 'O campo :attribute já está sendo utilizado.',
    ],
    'email_principal' => [
        'uniqui_for_id' => 'O campo :attribute já está sendo utilizado.',
        'uniqui_for_id_all' => 'O campo :attribute já está sendo utilizado.',
    ],
    'telefone' => [
        'uniqui_for_id' => 'O campo :attribute já está sendo utilizado.',
        'uniqui_for_id_all' => 'O campo :attribute já está sendo utilizado.',
    ],
    'celular' => [
        'uniqui_for_id' => 'O campo :attribute já está sendo utilizado.',
        'uniqui_for_id_all' => 'O campo :attribute já está sendo utilizado.',
    ],
    'cnpj' => [
        'uniqui_for_id' => 'O campo :attribute já está sendo utilizado.',
        'uniqui_for_id_all' => 'O campo :attribute já está sendo utilizado.',
    ],
],

replace and name your validation: uniqui_for_id replace and name the fields(inputs or texarea, etc):name

Browser other questions tagged

You are not signed in. Login or sign up in order to post.