MySQL может я создать столбец updated_at для определенного поля - PullRequest
0 голосов
/ 10 октября 2019

MYSQL Создать столбец updated_at для определенного поля.

Могу ли я создать столбец updated_at (timestamp) для определенного столбца При изменении конкретного столбца необходимо изменить столбец updated_at

Ответы [ 3 ]

0 голосов
/ 10 октября 2019

Вам нужно будет создать триггеры Mysql, чтобы сделать это. Если вы намерены сделать это с помощью миграции, вот пример кода, например, который вы должны использовать в своей таблице:

public function up()
    {
        DB::unprepared('
        CREATE TRIGGER tr_User_Name_Update AFTER UPDATE ON `users` FOR EACH ROW
            BEGIN
               IF NEW.column1 <=> OLD.column1 THEN
                -- RUN YOUR LOGIC HERE--
               END IF;
            END
        ');
    }

    public function down()
    {
        DB::unprepared('DROP TRIGGER `tr_User_Name_Update`');
    }

Я надеюсь, что это поможет вам начать работу.

0 голосов
/ 10 октября 2019

В вашей модели вы можете переопределить метод updateTimestamps () (в признаке Illuminate \ Database \ Eloquent \ Concerns \ HasTimestamps).

Вот как я бы это сделал:

Иметь дополнительное поле datetime в таблице базы данных. Скажем, вы хотите отслеживать столбец name, у меня будет поле datetime с именем name_updated_at.

В вашей модели используйте этот метод:

protected function updateTimestamps()
{
    // update the timestamp fields as usual
    parent::updateTimestamps();

    // if the name column has changed, then update the
    // name_updated_at field too
    if ($this->isDirty('name') {
        $this->name_updated_at = $this->freshTimestamp();
    }
    return $this;
}

Функция вызывается в методе save() Модели (ОК, вызывается через performInsert() и performUpdate().

Это позволяет избежать наличия кода приложения в MySQL и сохранить его в вашем приложении.

0 голосов
/ 10 октября 2019

Создайте триггер, который будет следить за любым обновлением таблицы

Затем проверьте изменение столбца в условии if

CREATE TRIGGER update_date BEFORE UPDATE ON myTable 
FOR EACH ROW 
BEGIN
IF NEW.column1 <=> OLD.column1 THEN
    SET new.updated_at = NOW()
END IF;
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...