Laravel static Model не возвращает ошибку - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть эта модель UserSetting.php:

class UserSetting extends Model
{
    protected $fillable = ['user_id', 'name', 'setting_value'];

    public static function set($user_id, $name, $value)
    {

        if (!User::find($user_id)) {
            return error('NoForeign_User');
        }

        self::updateOrCreate(
            ['user_id' => $user_id, 'name' => $name],
            ['setting_value' => $value]
        );
    }
}

И я хочу использовать ее таким образом внутри UserSettingController.php:

public function user(Request $request)
{
    Validator::make($request->all(), [
        'user_id'       => 'required|int',
        'name'          => 'required|string',
        'setting_value' => 'required|string',
    ], $this->messages)->validate();

    // HERE IS THE CALL
    UserSetting::set($request->user_id, $request->name, $request->setting_value);

    return saved();
}

Мне нужно позвонить UserSetting статическино НЕ с return :

return UserSetting::set(...)

Но когда статическая функция достигает значения if(!User::find($user_id)), она продолжает работу и показывает помощника saved() вместо return error('NoForeign_User')

Хотя, если я делаю это с возвратом return UserSetting::set(...), это правильно показывает ошибку.

Это правильно?Есть ли у меня какая-либо другая опция, кроме , возвращающая статический класс?

РЕДАКТИРОВАТЬ :

Моя error() функция такова:

function error($message, $code = 422)
{
    $response = ['message' => $message];
    if ($errors) {
        $response += [
            'errors' => $errors,
        ];
    }

    return response()->json([
        'message' => $message,
    ], $code);
}

1 Ответ

1 голос
/ 28 апреля 2019

Если вы не проверяете результат, возвращаемый при вызове статического метода, то программа наверняка продолжит выполнение следующей строки, которая в вашем случае является методом saved().

Чтобы остановить выполнение, лучше создать исключение, которое распространится на обработчик Exception и остановит выполнение функции.

Итак, вместо этого:

if (!User::find($user_id)) {
    return error('NoForeign_User');
}

попробуйте это:

if (!User::find($user_id)) {
    throw new \Exception('NoForeign_User');
}

или еще один, и лучший, на мой взгляд, подход, который я только что вспомнил, - это просто использовать функцию findOrFail:

User::findOrFail($user_id);

Это также вызовет исключение, если пользователь не был найден.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...