web-dev-qa-db-fra.com

Vérifier si le modèle laravel a été enregistré ou si la requête a été exécutée

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éé?

23
user2722667

Vérifiez si le modèle a été enregistré

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 ...

Vérifier si la requête a renvoyé un résultat

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())

Vérifier si la requête a été exécutée

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');
}
44
lukasgeiter

Vous pouvez également vérifier l'attribut public$exists sur votre modèle.

if ($myModel->exists) {
    // Model exists in the database
}
7
Simon

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 
}
3
Asem Khatib
/**
 * 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.');
}
0
Shanka SMS