J'ai récemment commencé à utiliser Eloquent.
Lorsque j'ai utilisé PHP Active Record, il y avait une fonction Nice qui vérifiait si un enregistrement avait été chargé à partir de la base de données ou s'il s'agissait d'une nouvelle instance. Y a-t-il quelque chose de similaire dans Eloquent que je pourrais utiliser?
Par nouveau, je veux dire:
$article = new Article;
alors que l'un de la base de données serait
$article = Article::find(1);
Tous les modèles laravel ont une propriété ->exists
.
Plus précisément, si le modèle est chargé à partir de la base de données ou a été enregistré dans la base de données depuis sa création, la propriété exists
sera vraie; Sinon, ce sera faux.
Si vous souhaitez savoir si le modèle a été modifié depuis qu'il a été récupéré dans la base de données, ou tout simplement pas enregistré du tout (c'est-à-dire s'il a besoin d'être sauvegardé), vous pouvez utiliser la fonction ->isDirty()
.
L'API Laravel est un endroit utile pour ce type d'informations: http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Model.html#method_isDirty et jette souvent beaucoup plus de lumière que la documentation par défaut.
Votre objet de modèle a un attribut spécialement conçu pour cela. Il a été récemment créé:
$item = Item::firstOrCreate(['title' => 'Example Item']);
if ($item->wasRecentlyCreated === true) {
// item wasn't found and have been created in the database
} else {
// item was found and returned from the database
}
On peut utiliser $appends
sur le modèle si vous l'utiliserez plusieurs fois .. par exemple pour vérifier si le commentaire nouvellement créé est modifié après sa création.
class Comment extends Model
{
protected $appends = ['is_edited'];
public function getIsEditedAttribute()
{
return $this->attributes['is_edited'] = ($this->created_at != $this->updated_at) ? true : false;
}
}
Vous pouvez l'utiliser comme
$comment = Comment::findOrFail(1);
if($comment->is_edited){
// write your logic here
}
J'utilise la méthode Laravel Eloquent pdateOrCreate () pour créer ou mettre à jour des enregistrements lors de l'importation à partir d'un fichier CSV.
$product = $this->updateOrCreate($attributes, $values);
Je voulais compter le nombre d'enregistrements nouvellement créés et d'enregistrements mis à jour. Étant donné que la méthode updateOrCreate()
enregistre l'enregistrement dans la base de données lors de sa création, $product->exists
Renverra toujours true
.
Une alternative consiste à comparer les horodatages created_at
Et updated_at
Du modèle avec l'heure actuelle:
if($product->created_at == Carbon::now())
$created++;
elseif ($product->updated_at == Carbon::now())
$updated++;