J'ai vu beaucoup de gens utiliser cette méthode pour vérifier si un modèle Laravel avait été sauvegardé. Alors maintenant, je me demande si c'est un moyen sûr.
Et puis-je aussi vérifier si les requêtes ci-dessous ont été exécutées comme ceci
Vérifiez si le modèle a été enregistré
Par exemple:
$myModel = new User();
$myModel->firstname = Input::get('firstname');
$myModel->lastname = Input::get('lastname');
$myModel->save();
//Check if user got saved
if ( ! $myModel->save())
{
App::abort(500, 'Error');
}
//User got saved show OK message
return Response::json(array('success' => true, 'user_added' => 1), 200);
Est-ce que ce qui précède est un moyen sûr de vérifier si mon modèle a été sauvegardé ou non?
Vérifie si la requête a donné un résultat
Par exemple:
$UserProduct = Product::where('seller_id', '=', $userId)->first();
if (! $UserProduct)
{
App::abort(401); //Error
}
Est-ce que ci-dessus renvoie une erreur si aucun produit n'a été trouvé?
Vérifie si la requête a été exécutée
Par exemple:
$newUser = User::create([
'username' => Input::get('username'),
'email' => Input::get('email')
]);
//Check if user was created
if ( ! $newUser)
{
App::abort(500, 'Some Error');
}
//User was created show OK message
return Response::json(array('success' => true, 'user_created' => 1), 200);
Est-ce que ci-dessus vérifie si un utilisateur a été créé?
save()
retournera un booléen, sauvegardé ou pas sauvegardé. Donc vous pouvez soit faire:
$saved = $myModel->save();
if(!$saved){
App::abort(500, 'Error');
}
Ou sauvegardez directement dans le si:
if(!$myModel->save()){
App::abort(500, 'Error');
}
Notez qu'il n'est pas logique d'appeler save()
deux fois de suite, comme dans votre exemple. Et au fait, de nombreuses erreurs ou problèmes qui empêcheraient le modèle d’être sauvegardé jetteront de toute façon une exception ...
first()
renverra null
si aucun enregistrement n'est trouvé afin que votre chèque fonctionne. Cependant, comme alternative, vous pouvez également utiliser firstOrFail()
, qui lancera automatiquement une ModelNotFoundException
lorsque rien ne sera trouvé:
$UserProduct = Product::where('seller_id', '=', $userId)->firstOrFail();
(Il en va de même pour find()
et findOrFail()
)
Malheureusement, avec create
, ce n'est pas si facile. Voici la source:
public static function create(array $attributes)
{
$model = new static($attributes);
$model->save();
return $model;
}
Comme vous pouvez le constater, il va créer une nouvelle instance du modèle avec le $attributes
, puis appeler save()
. Maintenant, si save()
où renvoyer true, vous ne le sauriez pas car vous obtiendriez de toute façon une instance de modèle. Ce que vous pourriez faire, par exemple, est de rechercher l'ID du modèle (car il n'est disponible qu'une fois l'enregistrement enregistré et le nouvel identifiant créé).
if(!$newUser->id){
App::abort(500, 'Some Error');
}
Vous pouvez également vérifier l'attribut public
$exists
sur votre modèle.
if ($myModel->exists) {
// Model exists in the database
}
Je voudrais faire ce mouvement lorsque j'utilise la méthode Model::create
:
$activity = Activity::create($data);
if ($activity->exists) {
// success
} else {
// failure
}
En ce qui concerne la méthode Save, c'est plus facile car $model->save()
renvoie Bool
:
$category = new Category();
$category->category_name = $request->category_name;
$is_saved = $category->save();
if ($is_saved) {
// success
} else {
// failure
}
/**
* Store a newly created country in storage.
*
* @url /country
* @method POST
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function store(Request $request)
{
# Filer & only get specific parameters.
$request = $request->only('code', 'name', 'status');
# Assign login user(Auth Control).
$request['created_by'] = Auth::user()->id;
# Insert data into `countries` table.
$country = Country::create($request);
if(!$country)
throw new Exception('Error in saving data.');
}