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
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;
}
Dans votre modèle, ajoutez cette méthode:
/**
* @param mixed $value
* @return $this
*/
public function setUpdatedAt($value)
{
return $this;
}
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
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;
}
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]);