webentwicklung-frage-antwort-db.com.de

Prüfen Sie, ob das Laravel-Modell gespeichert oder die Abfrage ausgeführt wurde

Ich habe viele Leute gesehen, die auf diese Weise nachgefragt haben, ob ein Laravel-Modell gerettet wurde. Nun frage ich mich, ob es ein sicherer Weg ist.

Und ich kann auch überprüfen, ob die unten aufgeführten Abfragen so ausgeführt wurden

Prüfen Sie, ob das Modell gespeichert wurde  

Z.B:

$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);

Ist das Obige ein sicherer Weg, um zu überprüfen, wann mein Modell gespeichert wurde oder nicht?

Prüfen Sie, ob die Abfrage ein Ergebnis zurückgegeben hat

Z.B:

$UserProduct = Product::where('seller_id', '=', $userId)->first();

if (! $UserProduct)
{
    App::abort(401); //Error
}

Gibt oben ein Fehler aus, wenn kein Produkt gefunden wurde?

Überprüfe ob die Abfrage ausgeführt wurde

Z.B:

$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);

Wird oben geprüft, ob ein Benutzer erstellt wurde?

23
user2722667

Prüfen Sie, ob das Modell gespeichert wurde

save() liefert ein booleanes, gespeichertes oder nicht gespeichertes. Sie können also entweder

$saved = $myModel->save();

if(!$saved){
    App::abort(500, 'Error');
}

Oder direkt im if speichern:

if(!$myModel->save()){
    App::abort(500, 'Error');
}

Beachten Sie, dass es nicht sinnvoll ist, save() wie in Ihrem Beispiel zweimal hintereinander aufzurufen. Übrigens, viele Fehler oder Probleme, die das Speichern des Modells verhindern würden, lösen sowieso eine Ausnahme aus ...

Prüfen Sie, ob die Abfrage ein Ergebnis zurückgegeben hat

first() gibt null zurück, wenn kein Datensatz gefunden wird, damit Ihre Prüfung funktioniert. Alternativ können Sie jedoch auch firstOrFail() verwenden, die automatisch eine ModelNotFoundException auslöst, wenn nichts gefunden wird:

$UserProduct = Product::where('seller_id', '=', $userId)->firstOrFail();

(Gleiches gilt für find() und findOrFail())

Prüfen Sie, ob die Abfrage ausgeführt wurde

Leider ist es mit create nicht so einfach. Hier ist die Quelle:

public static function create(array $attributes)
{
    $model = new static($attributes);

    $model->save();

    return $model;
}

Wie Sie sehen, wird eine neue Instanz des Modells mit dem $attributes erstellt und dann save() aufgerufen. Wenn nun save() den Wert true zurückgibt, wissen Sie nicht, da Sie sowieso eine Modellinstanz erhalten würden. Sie können beispielsweise nach der Modell-ID suchen (da diese erst verfügbar ist, nachdem der Datensatz gespeichert und die neu erstellte ID zurückgegeben wurde).

if(!$newUser->id){
    App::abort(500, 'Some Error');
}
44
lukasgeiter

Sie können auch das public-Attribut $exists an Ihrem Modell überprüfen.

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

Ich würde eine solche Verschiebung durchführen, wenn ich die Model::create-Methode verwende: 

$activity = Activity::create($data);

if ($activity->exists) {
   // success
} else {
   // failure 
}

Die Methode Save ist einfacher, weil $model->save()Bool zurückgibt:

$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