Pergunta

Eu tenho duas tabelas no Laravel conectado com uma tabela dinâmica.As duas tabelas são users e roles, e a tabela dinâmica é chamado de role_user.A tabela dinâmica contém também dois campos adicionais: start e stop.Dessa forma posso acompanhar as quais as funções de um user teve no passado.

Agora eu quero criar uma consulta que obtém todos os users que atualmente têm role_id = 3.

Primeiro eu tinha usado WherePivot, mas, aparentemente, que é escutas.

Eu agora fez a seguinte consulta usando Eloquent:

Role::with('User')
    ->where('id', '=', '3')
    ->where('role_user.start', '<', date('Y-m-d'))
    ->where('role_user.stop', '>', date('Y-m-d'))
    ->whereHas('users', function($q){
        $q->where('firstname', 'NOT LIKE', '%test%');
    })
    ->get();

Mas de alguma forma eu estou recebendo um erro que a coluna de início da tabela dinâmica não pode ser encontrado.Mas posso confirmar em PHPMyAdmin que a coluna está lá.

Esta é a totalidade de erro:

Illuminate \ Database \ QueryException
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'klj_role_user.start' in 'where clause' (SQL: select * from `klj_roles` where `id` = 3 and `klj_role_user`.`start` < 2014-06-02 and `klj_role_user`.`stop` > 2014-06-02 and (select count(*) from `klj_users` inner join `klj_role_user` on `klj_users`.`id` = `klj_role_user`.`user_id` where `klj_role_user`.`role_id` = `klj_roles`.`id` and `firstname` NOT LIKE %test%) >= 1)

Alguém pode me dizer se estou fazendo algo de errado ou me dar uma dica de onde eu deveria estar procurando agora?

Foi útil?

Solução

O erro está dizendo que você está ausente o start coluna na sua tabela dinâmica klj_role_user.O que você deve fazer é criar a coluna.Se a coluna já está lá, garantir que você está usando o banco de dados correto.

Eu também simplificou sua consulta um pouco.Você realmente não precisa de um whereHas porque você não está tentando limitar suas funções pelos usuários associados, mas pelo id, que neste caso, você está usando 3.Um with() funcionaria perfeitamente bem e wherePivot() parece estar funcionando bem para mim quando usado em conjunto com with().

$role = Role::with(array('users' => function($q)
{
    $q->wherePivot('start', '>', date('Y-m-d H:i:s'));
    $q->wherePivot('stop', '<', date('Y-m-d H:i:s'));
    $q->where('firstname', 'NOT LIKE', '%test%');
}))->find(3);


foreach($role->users as $user) {
    echo $user->firstname;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top