mysql junta ON e AND para laravel eloquent
Consegui obter o resultado da consulta necessário usando o seguinte sql bruto:
select `person`.`id`, `full_name`, count(actions.user_id) as total
from `persons`
left join `actions`
on `actions`.`person_id` = `persons`.`id`
and `actions`.`user_id` = $user
where `type` = 'mp'
group by `persons`.`id`
Mas ainda não consegui fazê-lo funcionar de maneira eloquente.
Com base em respostas semelhantes, tentei funções dentro de->where()
ouleftJoin()
, mas ocount
das ações de cada pessoa ainda não está sendo filtrada por$user
. Tal como está:
$query = Person::leftJoin('actions', function($q) use ($user)
{
$q->on('actions.person_id', 'persons.id')
->where('actions.user_id', $user);
})
->groupBy('persons.id')
->where('type', 'foo')
//->where('actions.user_id', '=', $user)
->get(['persons.id', 'full_name', DB::raw('count(actions.id) as total')]);
Pelo menos estou entrandoaproximadamente a direção certa, certo ...?
Se for relevante, oPersons.php
modelo tem doisactions
relacionamentos:
public function actions()
{
return $this->hasMany('Action');
}
public function actionsUser($id)
{
return $this->hasMany('Action')->where('user_id', $id);
}