Проверьте, сохранена ли модель 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.');
}