[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Rafael Belchior da Silva
Criador Rafael Belchior da Silva 05/10/2022

se eu vou adicionar uma permissao a um usuario, o primeiro usuario por exemplo: Como eu verifico se esse usuario já não tem essa permissao já cadastrada? Se eu não faço nenhum if, ele vai inserir duas permissões, como voce disse, o attach não ta nem ai, ele insere de qualquer maneira, tendo ou não. Qual a melhor estratégia? Entendeu minha duvida ? Nao sei se fui muito claro

$user->permissions()->attach(1);
Criador Rafael Belchior da Silva 05/10/2022

dessa forma resolveria o problema. Estou errado em fazer assim?

 

 $teste = $user->permissions;

    if (count($teste) > 0) {
        echo 'tem permissao ja inserida';
    } else {
        $user->permissions()->sync(1);
    }
Rafael Belchior da Silva
Criador Rafael Belchior da Silva 05/10/2022

Nesse caso não resolveria 100% o problema.

Quero saber por exemplo: No meu banco, tenho 3 permisões default: Permissão 1, 2 e 3. 

Certo. agora, quero verificar, se ele tiver permissao no 1, ai não deixo ele inserir novamente para 1, mas se ele tenta cadastrar a permissao 2 e essa permission ainda não esta cadastrada, ai sim pode ser inserida. Existe alguma forma de fazer isso facilmente?

Rafael Belchior da Silva
Manager Carlos Ferreira 05/10/2022

Olá, Rafael!
Tudo bem?

Algumas estratégias possíveis:

1) Usar o método sync para atualizar os relacionamentos, neste caso, sempre que for inserir um novo, precisa enviar os que já estão vinculados.

2) Fazer um if, como você fez, e inserir apenas os que ainda não estão vinculados, usando o método attach

3) Dar de opção para vincular apenas os registros ainda não vinculados.
Neste exemplo, retornamos apenas os roles que o usuário ainda não tem vinculo: https://github.com/especializati/larafood/blob/master/app/Models/User.php#L73

Depois disso, basta usar o método attach para vincular os novos roles ao usuário.

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!