В моем проекте я использую Laravel 5.5
с Eloquent
и Scout
драйверами для создания своего рода конечной точки API поисковой системы.
В моем сценарии у меня есть таблица SQL items
, котораяимеет свойство price_factor
.Таблица также хранится в индексе Elasticsearch
.
С этим значением и номером пользователя, связанного с этим элементом, я могу рассчитать правильную цену объекта.
AnПростой пример: элемент с id: 1
имеет price_factor: 2
и связан с 5 users
.Конечно, правильная цена предмета - 2 * 5 = 10
.
Теперь я должен запросить все результаты и использовать where conditions
, сортируя их по этому вычисленному свойству, и возвращать разбитые на страницы результаты.
Например: получить все товары с ценой от 5 до 10, отсортировать их по price
и разбить на страницы по 10 элементов на странице.
В Eloquent
я напишу:
// Set filters to be applied
$filters = [
['price', '>', 5],
['price', '<', 10],
];
// Sort by "update_at", or "price"
$sort = "price";
// Order by "ASC" mode
$order = "ASC";
// Number of rows per page
$rows = 10;
// Get items
$result = Item::orderBy(
$sort,
$order
// Get related user with item record, where has...
)->with(['users'])->whereHas(
// Take users related models
'users',
// Take the model related ("user") and use filters
function($relation_model) use ($filters) {
// Apply where condition with filters
$relation_model->where($filters);
}
// Paginate for the numbers of row requested
)->paginate($rows);
Как это сделать, если price
не является свойством таблицы items
?
Стоит ли хранить цену внутри таблицы и обновлять ее при каждом добавлении нового отношения пользователя?(или каждое удаленное отношение тоже).Это правильный подход?
Я думал о веб-сайте, подобном eBay
, или о другом аукционе в реальном времени, с похожей ситуацией моего: как вы думаете, они решили?
Спасибозаранее.