Этот вопрос относится к этому , но я слишком сильно упростил свою реальную проблему.Итак, я создал отдельный вопрос:
У меня есть две таблицы.Один интервал хранения в днях, связанный с именем, таким как bimonthly = 15
, и один другой, перечисляющий периодические действия и связанный с интервалом.
Я хотел бы перечислить следующие периодические действия, которые просты в чистом SQL:
SELECT *, DATE_ADD(updated_at, INTERVAL days DAY) AS next_action
FROM periodic_actions
INNER JOIN intervals ON interval_id = intervals.id
HAVING next_action > NOW()
Вот мои таблицы:
CREATE TABLE `intervals` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NULL,
`days` INT NULL,
PRIMARY KEY (`id`));
CREATE TABLE `periodic_actions` (
`id` INT NOT NULL AUTO_INCREMENT,
`interval_id` INT NOT NULL,
`name` VARCHAR(45) NULL,
`updated_at` TIMESTAMP NOT NULL,
PRIMARY KEY (`id`));
И содержание интервалов:
+----+----------+------+
| id | name | days |
+----+----------+------+
| 1 | daily | 1 |
| 2 | monthly | 30 |
| 3 | annually | 365 |
+----+----------+------+
Я хотел бы создать такой же запрос с Eloquent, где я могу использовать where
для моего виртуального столбца next_action
:
Action::orderBy('next_action', 'asc')
->where('next_action', '>', Carbon::now())
->get()
Ближайший, который я имеюне могу спрятаться в мою модель:
Action::join('intervals', 'interval_id', '=', 'intervals.id')
->select(['*', DB::RAW('DATE_ADD(updated_at, INTERVAL days DAY) AS next_action')])
->havingRaw(DB::RAW('next_action > NOW()'))->get();
Конечно, у меня есть эта база Модель:
class Action extends Model
{
protected $table = 'periodic_actions';
public function interval()
{
return $this->belongsTo(Interval::class);
}
}