Идентификатор последней записи неправильно выбран в laravel - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь получить идентификатор последней записи из моей таблицы подписок в laravel 6

Ниже приводится моя функция

public function activateApp($id)
    {
        $app = App::where('appId','=',$id)->firstOrFail();
        if($app->payment_option == 'monthly')
        {
            $renewDate = date('Y-m-d', strtotime(date("Y-m-d", strtotime("+30 day"))));
        }
        else
        {
            $renewDate = date('Y-m-d', strtotime(date("Y-m-d", strtotime("+365 day"))));
        }

        $lastdata = DB::table('subscriptions')->orderBy('id', 'desc')->first();
        //dd($lastdata);
        //die();

        //update app table records
        DB::table('apps')
            ->where('appId', $id)
            ->update([
                'status' => $lastdata,
                'renewDate' => $renewDate
            ]);

        return redirect()->route('home');
    }

Я использовал

$lastdata = DB::table('subscriptions')->orderBy('id', 'desc')->first();

, чтобы получить идентификатор, но когда кажется, что он не работает, как когда я пытаюсь обновить столбец ststus таблицы приложения из этого значения, он не обновляется и даже не выдает ошибку ... даже «dd» не работает как хорошо.

(Кажется, что вся функция перестала работать после последней загрузки записи)

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Вы пытаетесь обновить status всем объектом $lastdata.

Я не знаю схему вашей базы данных, но, вероятно, вам следует попробовать что-то вроде

            DB::table('apps')
                ->where('appId', $id)
                ->update([
                    'status' => $lastdata->status,
                    'renewDate' => $renewDate
                ]);

Вы также можете дважды проверить, что в базе данных subscriptions есть строки, и она не пуста.

0 голосов
/ 10 апреля 2020

Вы собираетесь обновить поле статуса объектом подписок. и еще одна вещь - вам не нужно снова извлекать объект приложения, поскольку у вас уже есть, поэтому просто измените значение и сохраните его.

public function activateApp($id) {
    $app = App::where('appId','=',$id)->firstOrFail();
    if($app->payment_option == 'monthly')
    {
        $renewDate = date('Y-m-d', strtotime(date("Y-m-d", strtotime("+30 day"))));
    }
    else
    {
        $renewDate = date('Y-m-d', strtotime(date("Y-m-d", strtotime("+365 day"))));
    }

    $lastdata = DB::table('subscriptions')->orderBy('id', 'desc')->first();

    //update app table records
    $app->status = $lastdata->status;
    $app->renewDate = $renewDate;

    if ($app->save()) {
        return redirect()->route('home');
    } else {
        // show some error page.
    }

}
...