Подтвердить что ты не робот

Laravel - отключить обновление при обновлении

Возьмите проблему с обновлением с помощью построителя запросов на laravel 5. Я попытался отключить update_at, но не смог.

Вот мой код:

    $query = StockLog::where('stock_id', $id)->whereBetween('created_at', $from, $to])->update(['batch_id' => $max + 1]);

Я пробовал два способа: первый в моей модели i:

public function setUpdatedAtAttribute($value)
{
    /*do nothing*/
}

Второй:

$stocklog = new StockLog;
$stocklog->timestamps = false;

$query = $stocklog::where('stock_id', $id)->whereBetween('created_at', [$from, $to])->update([
        'batch_id' => $max + 1]);

оба из них потерпели неудачу. есть ли вообще отключить update_at?

Заранее спасибо

4b9b3361

Ответ 1

По умолчанию Eloquent автоматически сохранит столбцы created_at и updated_at в вашей таблице базы данных. Просто добавьте эти столбцы метки времени на стол, а "Красноречивый" позаботится об остальном.

Я действительно не предлагаю их удалить. Но если вы хотите использовать следующий способ.

добавьте следующее в модель:

public $timestamps = false;

Это приведет к отключению временных меток.

EDIT: похоже, что вы хотите сохранить поле created_at, вы можете переопределить getUpdatedAtColumn в своей модели.

Используйте следующий код:

public function getUpdatedAtColumn() {
    return null;
}

Ответ 2

В вашей модели добавьте этот метод:

/**
 * @param  mixed  $value
 * @return $this
 */
public function setUpdatedAt($value)
{
    return $this;
}

Ответ 3

Вы можете использовать следующую команду, если хотите ее окончательно отключить.

Добавьте к своей модели следующее...

public $timestamps = false;

И если вы хотите продолжать использовать created_at, добавьте следующее.

    static::creating( function ($model) {
        $model->setCreatedAt($model->freshTimestamp());
    });

ИЛИ используйте следующий способ...

/**
 * Set the value of the "updated at" attribute.
 *
 * @param  mixed  $value
 * @return void
 */
public function setUpdatedAt($value)
{
    $this->{static::UPDATED_AT} = $value;
}

Ответ 4

В этом случае лучше использовать Query Builder вместо Eloquent, потому что Query Builder не вводит в заблуждение поля временных меток. Использование Query Builder будет иметь преимущество в том, что он нацелен только на соответствующую операцию обновления без изменения всей вашей модели.

В одной строке вы можете сделать:

$query = \DB::table('stocklogs')->where('stock_id', $id)->whereBetween('created_at', [$from, $to])->update(['batch_id' => $max + 1]);

Ответ 5

Принятый ответ не помог мне, но привел меня в правильном направлении к этому решению:

class Whatever extends Model {
    //...
    const UPDATED_AT=NULL;
    //...

Laravel 5.3