Наблюдаемые значения обновления

Моя проблема проста
Я хочу, чтобы каждый раз, когда пользователь выбирает пакет, увеличивается значение столбца valid_until на основе выбранного пакета;
Чтобы решить это, я создал

 PackageObservable{
public function creating(Package $package)
{    DB::table('permit')
->select('permit.valid_until')
->join('package', 'user_id', '=', 'package.user_id')
->where('package.name','=',$package->name)
->addMonths(12);
DB::table('permit')
->select('permit.name')
->join('package', 'user_id', '=', 'package.user_id')
->where('package.name','=','option3')
->addWeeks(1);
}}

Проблема в том, что я не знаю, как получить package.name.
Отношения между Пакетом и Разрешением следующие:

  1. Пакет (номер, имя, entry_nr, user_id, цена, flga_six_days)
  2. Разрешение (идентификатор, user_id, membership_id, used_entries, valid_until, записи, flag_six_days)
    Заранее спасибо! Я ценю вашу помощь!
    броски:

Метод BadMethodCallException addMonths не существует.

1

Решение

Предполагая, что у вас есть что-то вроде следующего в вашем ServiceProvider

public function boot()
{
Package::observe(PackageObservable::class);
}

Модель пакета должна быть передана в класс Observable, поэтому, чтобы получить имя пакета, вы должны просто сделать это $package->name, Если это значение равно null, то при создании пакета вы не определяете имя.

Все, что делает следующая команда, пытается запустить оператор выбора;

DB::table('permit')
->select('permit.valid_until')
->join('package', 'user_id', '=', 'package.user_id')
->where('package.name','=',$package->name)
->addMonths(12);

Метод addMonths не существует в построителе запросов. У тебя есть addMonths() метод на вашей модели разрешения?

Вы, вероятно, хотите сделать что-то вроде

 $permit = Permit::select("valid_until")->where('user_id',$package->user_id)->orderBy('user_id', 'desc')->first();

if ($permit) {
$newValidUntil = $permit->valid_until->addMonths(12);
$permit->update(['valid_until' => $newValidUntil]);
}

Если вы прокомментируете, чтобы сообщить мне, как вы поживаете, я всегда могу обновить свой ответ в соответствии с любой дополнительной информацией, которая вам нужна.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]