web-dev-qa-db-fra.com

Laravel - Désactiver Mis à jour lors de la mise à jour

Obtenez un problème avec la mise à jour en utilisant le générateur de requêtes sur laravel 5. J'ai essayé de désactiver le updated_at mais continue d'échouer.

Voici mon code:

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

J'ai essayé 2 façons: La première de mon modèle, je fixe:

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

Deuxième:

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

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

les deux sont en panne. est-il possible de désactiver le updated_at? 

Merci d'avance

13
ssuhat

Par défaut, Eloquent gérera automatiquement les colonnes created_at et updated_at de votre table de base de données. Ajoutez simplement ces colonnes d’horodatage à votre table et Eloquent se chargera du reste.

Je ne suggère pas vraiment de les supprimer. Mais si vous voulez utiliser la manière suivante.

ajoutez ce qui suit à votre modèle :

public $timestamps = false;

Cela désactivera les horodatages.

EDIT: il semble que vous souhaitiez conserver le champ created_at; vous pouvez remplacer la getUpdatedAtColumn dans votre modèle.

Utilisez le code suivant: 

public function getUpdatedAtColumn() {
    return null;
}
25
Akar

Dans votre modèle, ajoutez cette méthode:

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

La réponse acceptée n'a pas fonctionné pour moi, mais m'a conduit dans la bonne direction à cette solution qui a:

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

Laravel 5.3

6
chiliNUT

Vous pouvez utiliser ce qui suit si vous voulez le faire de manière permanente.

Ajouter le suivi à votre modèle ...

public $timestamps = false;

Et si vous voulez continuer à utiliser created_at, ajoutez ce qui suit.

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

OU utiliser la manière suivante ...

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

Dans ce cas, il est préférable d'utiliserQuery Builderau lieu deEloquentparce queQuery Builderne modifie pas implicitement les champs d'horodatage. L’utilisation deQuery Builderaura l’avantage de ne cibler que l’opération de mise à jour concernée sans modifier tout votre modèle.

En une ligne, vous pouvez faire:

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