Проверьте, сохранена ли модель laravel или выполнен запрос.

Я видел много людей, использующих этот способ, чтобы проверить, сохранена ли модель laravel. Так что теперь я задаюсь вопросом, безопасен ли он.

А также я могу проверить, выполнены ли запросы, подобные этому

Проверьте, сохранена ли модель

Например:

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

Является ли вышеуказанный безопасный способ проверить, когда моя модель была сохранена или нет?

Проверьте, возвратил ли запрос результат

Например:

 $UserProduct = Product::where('seller_id', '=', $userId)->first(); if (! $UserProduct) { App::abort(401); //Error } 

Вызывает ли выше ошибку, если не найден продукт?

Проверка выполнения запроса

Например:

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

Проверяет ли выше, был ли пользователь создан?

Проверьте, сохранена ли модель

save() вернет логическое, сохраненное или не сохраненное. Таким образом, вы можете:

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

Или непосредственно сохранить в if:

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

Обратите внимание, что не имеет смысла вызывать save() два раза подряд, как в вашем примере. И, кстати, многие ошибки или проблемы, которые препятствовали сохранению модели, в любом случае будут создавать исключение …

Проверьте, возвратил ли запрос результат

first() вернет значение null если запись не будет найдена, чтобы найти результаты проверки. Однако в качестве альтернативы вы также можете использовать firstOrFail() который автоматически выкинет ModelNotFoundException когда ничего не будет найдено:

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

(То же самое верно для find() и findOrFail() )

Проверка выполнения запроса

К сожалению, create это не так просто. Вот источник:

 public static function create(array $attributes) { $model = new static($attributes); $model->save(); return $model; } 

Как вы можете видеть, он создаст новый экземпляр модели с $attributes а затем вызовет save() . Теперь, если save() где для возврата true, вы не знаете, потому что в любом случае вы получите экземпляр модели. Например, вы можете проверить идентификатор модели (поскольку это доступно только после сохранения записи и возврата вновь созданного идентификатора)

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

Вы также можете проверить public атрибут $exists на вашей модели.

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

Я бы сделал такой переход, когда я использую метод Model :: create:

 $activity = Activity::create($data); if ($activity->exists) { // success } else { // failure } 

Что касается метода Save, это проще, потому что $ model-> save () возвращает 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.'); }