@ngame

Почему Eloquent ORM не хочет обновлять модель?

Добрый день!
Laravel 5.3 не хочет обновлять eloquent модель, при этом создает новые на ура! В модели прописывал $fillable, результат тот же. Дебагом проходил по полям, значение устанавливалось тот что надо, ошибок при вызове save() не было..Что я не так делаю?
try {
            \DB::beginTransaction();

            /** @var vpStore $store */
            $store = vpStore::findOrFail($request->store);
            $date = new Carbon($request->date);
            $totalQty = (int) $store->Qty;
            $qty = (int) $request->qty;

            /** @var vpReport $report */
            $report = new vpReport();
            $report->StoreId = $store->Id;
            $report->Price = 0;
            $report->Qty = $qty;
            $report->Date = $date->format('Y-m-d H:i:s');
            $report->Type = vpReport::TYPE_CASH;
            $report->save();

            $store->Qty = $totalQty - $qty;
            $store->save();

            \DB::commit();
        } catch (QueryException $e) {
            \DB::rollBack();
        }
  • Вопрос задан
  • 224 просмотра
Решения вопроса 1
aleserkan
@aleserkan
Web Developer
А для чего вы с транзакциями и сохранениями вручную работаете? Попробуйте так
DB::transaction(function () {

    $store = vpStore::findOrFail($request->store);
    $date = new Carbon($request->date);
    $totalQty = (int) $store->Qty;
    $qty = (int) $request->qty;

    vpReport::create([
        'StoreId' => $store->Id,
        'Price' => 0,
        'Qty' => $qty,
        'Date' => $date->format('Y-m-d H:i:s'),
        'Type' => vpReport::TYPE_CASH
    ]);
            
    $store->update(['Qty' => $totalQty - $qty]);
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AmdY
@AmdY
PHP и прочие вебштучки
DB::enableQueryLog();
DB::getQueryLog();

Плюс посмотрите в логи, мало ли какая ошибка вывалилась
И вообще, советую перечитать документацию по laravel.
Filleble здесь ни при чём, он работает при массовом заполенине, а у ва геттеры.
Пропишите свзязь vpStore и vpReport, пользуйтесь ей.
Приведение типов в контроллере смотрится нелепо и есполезно, такие вези делайте внутри моделей через setAttribute, то же касается и Carbon
Не пользуйтесь фасадами, лучше инджектите модель, заодно уберётся костыль с phpdoc
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы