Проверка даты Laravel в модели - PullRequest
0 голосов
/ 18 ноября 2018

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

Код:

static::save(function($model)
    {
        //User can't save data between this date
        $from = date('2018-01-01');
        $to = date('2018-11-19');

        //Disable save function between specific
        if (User::whereBetween('date', [$from, $to])->get()&&
           (!property_exists($model, 'always_writable') || !$model->always_writable)) {
            $model->setErrors(trans('validation.read_only'));
            return false;
        }
        return $model->validate();
    });

Ответы [ 3 ]

0 голосов
/ 18 ноября 2018

Вам необходимо проверить счетчик запроса:

//if count is greater than 0

static::save(function($model)
    {
        //User can't save data between this date
        $from = date('2018-01-01');
        $to = date('2018-11-19');

        //Disable save function between specific
        if (count(User::whereBetween('date', [$from, $to])->get()) > 0 &&
           (!property_exists($model, 'always_writable') || !$model->always_writable)) {
            $model->setErrors(trans('validation.read_only'));
            return false;
        }
        return $model->validate();
    });
0 голосов
/ 19 ноября 2018

Не совсем уверен, что вы хотели достичь с помощью запроса:

User::whereBetween('date', [$from, $to])->get()

Это в основном получает всех пользователей в системе со столбцом даты между $ from и $ to. Предположительно, это всегда будет правдой. Не должно ли это быть:

Auth::user()->whereBetween('date', [$from, $to])->count()

Что означает: текущий зарегистрированный пользователь в столбце даты между $ from и $ to?

Альтернатива:

$userDate = Auth::user()->date;
if (($userDate >= $from && $userDate <= $to) && ... ) {
  ...
} 
0 голосов
/ 18 ноября 2018

быстрых маффов с метками времени Unix.

 static::save(function($model)
        {
            //User can't save data between this date
            $from = strtotime('2018-01-01');
            $to = strtotime('2018-11-19');

            //Disable save function between specific
            if ( !(property_exists($model, 'always_writable') 
                && $model->always_writable) 
                && (time() >= $form && time() <=$to)){
                $model->setErrors(trans('validation.read_only'));
                return false;
            }
            return $model->validate();
        });

edit: добавлены условия always_writable.edit2: сделал ваши чеки Always_writable на самом деле сделать что-то разумное.

...