Проверьте, сохранена ли модель 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);
Проверено ли выше, был ли пользователь создан?
Ответы
Ответ 1
Проверьте, сохранена ли модель
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');
}
Ответ 2
Вы также можете проверить атрибут public
$exists
на своей модели.
if ($myModel->exists) {
// Model exists in the database
}
Ответ 3
Я бы сделал такой переход, когда я использую метод 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
}
Ответ 4
/**
* 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.');
}