ig0r74
@ig0r74
MODX-разработчик

Как решить проблему n+1, если для hasMany нужно дополнительное условие?

Подключаю в модели стороннюю таблицу и нужно подсчитать количество Order. Если делать Eager Loading, то получаю количество всех заказов, а отфильтровать по дате в hasMany не получается. Дата хранится в поле с форматом datetime (2021-12-31 00:00:00):

class View extends Model
{
    use HasFactory;
    protected $connection = 'modx';
    protected $table = 'modx_site_partner_views';

    protected $casts = [
        'date' => 'datetime',
    ];

    // Здесь нужно добавить условие, если вообще возможно
    public function orders()
    {
        return $this->hasMany(Order::class, 'partner_id', 'partner_id');
    }

    // так получается по дополнительному запросу, но работает корректно
    public function getTotalOrdersAttribute()
    {
       return $this->hasMany(Order::class, 'partner_id', 'partner_id')->whereDate('createdon', '=', $this->date)->count();
    }
}
  • Вопрос задан
  • 73 просмотра
Решения вопроса 1
ig0r74
@ig0r74 Автор вопроса
MODX-разработчик
Все сложности были из-за даты. Поле было datetime а выбрать нужно было за день и whereDate здесь не работает - нужен сырой запрос:
<?php
View::withCount(['orders as total_orders' => function($query) {
        $query->whereRaw('date(`modx_ms2_orders`.`createdon`) = date(`modx_site_partner_views`.`date`)');
    }])
    ->where('partner_id', auth()->user()->partner_code)
    ->orderByDesc('id')
    ->paginate(10);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы