[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
JEFFERSON LUIZ ROSSINI
Criador JEFFERSON LUIZ ROSSINI 02/03/2022

Carlos, estou usando repository, onde eu devo declarar o metodo permissionAvailable()?
Na ProfileInterfaceRepository, ou EloquentProfileQueryBuilder ou na Model?
O que muda?

Manager Carlos Ferreira 02/03/2022

Olá, Jefferson!
Tudo bem?

A interface (ProfileRepositoryInterface) ela tem apenas a assinatura dos métodos que a implementação deve ter.

No seu repository (ProfileRepository) que implementa a interface, ele deve conter a implementação do método permissionAvailable

Ficou claro amigo?

Carlos Ferreira
Criador JEFFERSON LUIZ ROSSINI 02/03/2022

Sim, ficou sim. Criei no meu EloquentProfileRepositor.php o method permissionAvailable().

    public function permissionsAvailable()
    {
        $permissions = $this->entity->whereNotIn('id', function($query)
        {
           $query->select('permissions_id');
           $query->from('permission_profile');
           $query->whereraw("permission_profile.profile_id={$this->entity->id}");
        })->paginate();

        return $permissions;
    }

Mas recebo este erro de volta:

Illuminate\Database\QueryException

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 (SQL: select count(*) as aggregate from `profiles` where `id` not in (select `permissions_id` from `permission_profile` where permission_profile.profile_id=))

 

JEFFERSON LUIZ ROSSINI
Criador JEFFERSON LUIZ ROSSINI 02/03/2022

Esta é a query que está me retornando:

select * from `profiles` where `id` not in (select `permission_profile`.`permission_id` from `permission_profile` where permission_profile.profile_id=)

 

(corrigi o nome da coluna permission_id e ainda esta com erro)

JEFFERSON LUIZ ROSSINI
Criador JEFFERSON LUIZ ROSSINI 02/03/2022

No Banco de dados funciona normalmente

JEFFERSON LUIZ ROSSINI
Manager Carlos Ferreira 02/03/2022

Troque isso: $query->select('permissions_id');
Por isso: $query->select('permissions.id');

Veja como deve ficar: https://github.com/especializati/larafood/blob/master/app/Models/Profile.php#L31

Carlos Ferreira
Criador JEFFERSON LUIZ ROSSINI 02/03/2022

Realmente o meu agora esta identico ao seu, mas o problema não é esse.
Identifiquei que o problema está em recuperar o ID do profile.
No meu codigo eu informei isso pois estou usando o EloquentProfileRepository:

$query->whereRaw("permission_profile.profile_id={$this->entity->id}");
dd($this->entity->id);

Mas ao fazer o DD ele me retorna NULL. O que gera o erro de syntax.
Se eu informar apenas isso abaixo, ocorre erro pois $this não faz referencia a nenhuma model.
Não sei como passar o ID para a query.

$query->whereRaw("permission_profile.profile_id={$this->id}");

 

JEFFERSON LUIZ ROSSINI
Criador JEFFERSON LUIZ ROSSINI 02/03/2022

Consegui resolver Carlos. Muito Obrigado pela ajuda.

Minha solução foi passar o ID por parametro e depois usar na função de callback.
Aqui o código:

    public function permissionsAvailable($id)
    {
        $permissions = $this->entity->whereNotIn('id', function ($query) use ($id) {
            $query->select('permission_profile.permission_id');
            $query->from('permission_profile');
            $query->whereraw("permission_profile.profile_id={$id}");
        })->paginate();

        return $permissions;
    }
JEFFERSON LUIZ ROSSINI
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!