преобразовать необработанный запрос с подзапросами в красноречивый

У меня есть следующий рабочий запрос с подзапросом, который отлично работает. Я хотел бы перейти к Eloquent, потому что я хотел бы сохранить другую связь с моей моделью пользователя.

select * from (
select p.from, a.account_id, count(*) as num
from accounts as a
inner join accounts_prop as p on (a.account_id = p.account_id)
group by p.account_id 
having num = 1 ) query

where year(query.von) = 2017

У меня уже есть модель пользователя, представленная (таблица accounts), и модель свойств, представленная (таблица properites).

User -> Property отношение один ко многим

Пользователь

public function properties()
{
   return $this->hasMany('App\Property', 'account_id', 'account_id');
}

Свойство

  public function user()
    {
       return $this->belongsTo('App\User', 'account_id');
    }

Вывод должен вернуть всех пользователей, у которых есть одно свойство, и свойство соответствует текущей дате.

В моем необработанном запросе для целей тестирования я использовал постоянный год


person fefe    schedule 28.07.2017    source источник
comment
Пожалуйста, опубликуйте свою структуру таблицы и опубликуйте ожидаемый результат запроса.   -  person NikuNj Rathod    schedule 28.07.2017


Ответы (1)


На самом деле вроде работает

User::whereHas('properties', function($query){

            $query = $query->where('von', '=', Carbon::now()->format('Y-m-d'))
                           ->havingRaw('count(account_id) = 1')
                           ->with('department');

        })->get();
person fefe    schedule 30.07.2017