Моя проблема проста
Я хочу, чтобы каждый раз, когда пользователь выбирает пакет, увеличивается значение столбца 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.
Отношения между Пакетом и Разрешением следующие:
Метод BadMethodCallException addMonths не существует.
Предполагая, что у вас есть что-то вроде следующего в вашем 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]);
}
Если вы прокомментируете, чтобы сообщить мне, как вы поживаете, я всегда могу обновить свой ответ в соответствии с любой дополнительной информацией, которая вам нужна.
Других решений пока нет …