J'ai remarqué qu'un modèle n'appelait pas l'actualisation ou l'événement mis à jour s'il n'y avait pas de modifications dans le modèle. Je suppose qu'il va comparer getOriginal
avec getDirty
.Forcer le déclenchement de la mise à jour + les événements mis à jour
Cependant, lorsque je ne mets à jour que la relation d'un modèle, par exemple, en attachant de nouvelles catégories, cette opération étant présente dans l'événement mis à jour, elle ne sera jamais déclenchée.
Dans cette situation spécifique, les catégories sont supprimées lors de la mise à jour et de nouvelles lors de la mise à jour de l'événement. Mais il n'est déclenché que si je change au moins une valeur dans le modèle.
Ai-je raté quelque chose?
Cela ne se passait pas en 4.1, il se passe maintenant avec 4.2, compositeur mis à jour aujourd'hui.
Mise à jour:
Voici les événements updating
et updated
dans le coffre de mon modèle de produit:
public static function boot()
{
parent::boot();
static::updating(function($model)
{
$model->author_id = 1;//Auth::user()->id;
$history = new ProductHistory($model->getOriginal());
$model->history()->save($history);
$model->languages()->update(array(Product::$historyKey => $history->id));
$model->currencies()->update(array(Product::$historyKey => $history->id));
$model->paymentTypes()->update(array(Product::$historyKey => $history->id));
}
static::updated(function($model)
{
if(Input::has('languages')) $model->languages()->attach(Input::get('languages'));
if(Input::has('currencies')) $model->currencies()->attach(Input::get('currencies'));
if(Input::has('payment_types')) $model->paymentTypes()->attach(Input::get('payment_types'));
}
}
et l'événement updating
dans le BaseModel
:
static::updating(function($model)
{
if(property_exists(get_class($model), 'rules'))
{
if(!$model->validate()) return false;
}
});
Cette ne fonctionne plus dans 4.2, comme la mise à jour et u Les événements pdated sont ignorés lorsqu'il n'y a pas de modifications pour le modèle. Mon correction devait utiliser seulement saving
et saved
événements, au sein de ces événements, je peux identifier si le modèle est mis à jour ou créé en vérifiant si getOriginal()
existe ou non.
st votre code responsable de la mise à jour. –
@ WereWolf-TheAlpha Salut à nouveau M. Werewolf, j'ai mis à jour la question. – user2094178