Я пытаюсь настроить серверную конфигурацию для данных таблицы. Итак, у меня есть модель CounterLog
, в которой установлено 3 отношения [belongsTo
] category
, location
, user
. Я хочу, чтобы запрос отфильтровал все данные CounterLog
, включая отношения, с установленными методами offset
, limit
и orderBy
и одновременно получил все отфильтрованные строки, игнорируя offset
и limit
. Вот что мне удалось до сих пор и, может быть, лучше понять, чего я хочу:
$search_query = function($q) use ($search) {
$q->where('name', 'like', '%' . $search . '%');
};
$query = CounterLog::where('created_at', 'like', '%' . $search . '%')
->orWhereHas('category', $search_query)
->orWhereHas('location', $search_query)
->orWhereHas('user', $search_query);
$logs = $query->offset($offset)->limit($limit)->get();
$logs_total = $query->offset(0)->count();
В последней строке я использую $query->offset(0)
, потому что по какой-то причине, если offset
установлен на число, $logs_total
становится 0. Я не уверен, что это правильный способ сделать это .. но даже Я не знаю, как использовать orderBy
для примера. category.name
.
Я знаю, что всегда могу использовать необработанные запросы в eloquent, но я хочу знать, есть ли способ использовать ORM и отношения. Я был бы очень признателен, если бы вы могли помочь мне с этим .. потому что борьба реальна.
Большое спасибо:)
Очевидно, у меня нет решения с ORM, поэтому я сделал это с "необработанными" запросами:
$query = $this->db->table('counter_logs')
->leftJoin('categories', 'counter_logs.category_id', '=', 'categories.id')
->leftJoin('locations', 'counter_logs.location_id', '=', 'locations.id')
->leftJoin('users', 'counter_logs.user_id', '=', 'users.id');
->where('counter_logs.created_at', 'like', '%' . $search . '%')
->orWhere('categories.name', 'like', '%' . $search . '%')
->orWhere('locations.name', 'like', '%' . $search . '%')
->orWhere('users.name', 'like', '%' . $search . '%');
->select('counter_logs.id as id', 'categories.name as category', 'locations.name as location', 'users.name as user', 'counter_logs.created_at as date');
$json['total'] = $query->count();
$logs = $query->offset($offset)->limit($limit)->orderBy($sort, $order)->get();