#php #mysql #laravel #octobercms #laravel-query-builder
#php #mysql #ларавель #октябрьские #laravel-конструктор запросов
Вопрос:
Я был бы признателен за некоторую помощь в построении запросов laravel/octobercms. У меня есть две модели/таблицы, как показано ниже:
Модель CV имеет много опыта, модель опыта принадлежит CV.
CVs table | id | user_id | | --- | ------ | | 1 | 11 | | 2 | 22 | Experiences table | id | cv_id | from | to | | --- | ------ | ----- | --- | | 1 | 1 | 2019-01-01 | 2020-01-01 | | 2 | 1 | 2020-05-02 | 2021-09-01 | | 3 | 2 | 2019-01-01 | 2019-05-01 | | 4 | 2 | 2020-01-01 | 2021-05-01 |
Я пытаюсь использовать конструктор запросов для фильтрации резюме на основе продолжительности опыта. Например, резюме с идентификатором: 2, имеет два опыта работы с идентификаторами 3 и 4, каждый с опытом работы 4 мотылька, поэтому в общей сложности резюме с идентификатором: 2 имеет опыт работы 8 месяцев.
До сих пор я пробовал варианты:
$query = Cv::query()-gt;whereHas('experiences', function ($query) { $query-gt;addSelect(DB::raw("SUM(DATEDIFF(COALESCE(`to`, CURDATE()), `from`)) AS sum_experience")); });
Вышеизложенное производит:
select * from `cvs` where exists (select *, SUM(DATEDIFF(COALESCE(`to`, CURDATE()), `from`)) AS sum_experience from `cv_expriences` where `cvs`.`id` = `cv_expriences`.`cv_id`)
Но я не знаю, как я могу сравнить значение sum_experience со значением, которое мне нужно. Любая помощь будет признательна.
Комментарии:
1. Я хотел бы дать одно предложение, если это возможно, вы должны рассчитать опыт за месяц при добавлении/обновлении … и добавьте его непосредственно в таблицу резюме, это упростит вам управление и поиск по нему, а менее сложный запрос к БД увеличит время отклика …
2. это может показаться излишним, но когда вы масштабируете свой проект, эти запросы будут создавать проблемы …
3. Спасибо за предложение, я думал об этом как о последнем решении. Может быть, мне следовало подумать об этом в первую очередь.
4. это было бы лучше всего, так как это значительно облегчит вашу жизнь, а запросы будут очень простыми 🙂
Ответ №1:
Было бы здорово, если бы вы могли просто calculate experience in a month
добавлять/обновлять записи Experiences table
и добавлять их непосредственно в CV table
.
Это действительно упростит вам управление и поиск с его помощью, а
less complex
запросы к БД увеличат время отклика
если у вас есть какие-либо сомнения, пожалуйста, прокомментируйте.
Комментарии:
1. Проблема с этим решением заключается в том, что иногда столбцы «кому» могут быть «нулевыми». В таких случаях важна текущая дата. Я отложил этот вопрос на данный момент, я прокомментирую, когда у меня будет рабочее решение.
2. так что вы можете просто рассчитать на основе текущих данных и заполнить данные, я думаю …