Laravel - PHP-запрос неправильно устанавливает значения базы данных - PullRequest
0 голосов
/ 24 октября 2018

У меня есть приложение Laravel, и на одной из страниц я хочу позволить пользователю иметь возможность обновлять некоторые значения в базе данных, вводя / изменяя данные в нескольких текстовых полях.

Функция Angular, вызываемая атрибутом (change) этих текстовых полей HTML:

updatePreferredAddresseeDetails($event, payer) {
    console.log("updatePreferredAddresseeDetails() called ");

    const contact = payer['contacts'][$event.currentTarget.selectedIndex]; 

    payer.loading = true;
    payer.originalAddresseeName = payer.addresseename;
    payer.originalAddresseeNamePdf = payer.addresseenamepdf;

    payer.ADDRESSEENAME = $event.contactPreferredName;
    payer.ADDRESSEENAMEPDF = $event.contactPreferredAddresseeName;

    this.provService.updatePreferredAddresseeDetails(payer).subscribe(
        (response:any) => {
            payer.addresseename = response.addresseename;
            payer.addresseenamepdf = response.addresseenamepdf;

            const message = new Message();
            message.type = MessageType.SUCCESS;
            message.message = 'Preferred Addressee details have been updated. ';
            this.messagingService.emitMessage(message);

            payer.loading = false;
        },
        (error:any) => {
            //reset the names back to what they were originally because saving failed
            payer.addresseename = payer.originalAddresseeName;
            const message = new Message();
            message.type = MessageType.ERROR;
            message.message = error.message || 'There was a problem updaing the preferred addressee details. If the problem persists, please contact us.';
            this.messagingService.emitMessage(message);

            payer.loading = false;
        }
    );
}

Функция PHP, вызываемая вышеуказанной функцией Angular, которая должна устанавливать значения в базе данных:

public function updatePreferredAddresseeDetails(Request $request)
{
    try
    {
        DB::beginTransaction();

        $transactionContactId = $request->input('transactionContactId');
        $transactionItemId = $request->input('transactionItemId');

        if ($transactionItem = transactionItem::find($transactionItemId))
        {
            $transaction = $transactionItem->transaction;

            if (User::canAccessTransaction( auth()->user()->user, $transaction))
            {
                $account = Account::find($transaction->accountId);
                $account->savePropertyValueByPropertyTag('ADDRESSEENAME', $request->input('contactPreferredName'));
                $account->savePropertyValueByPropertyTag('ADDRESSEENAMEPDF', $request->input('contactPreferredAddresseeName'));

                $account->save();

                DB::commit();

                return response()->json([
                    'success' => true,
                    'addresseeName' => $account->ADDRESSEENAME,
                    'addresseeNamePdf' => $account->ADDRESSEENAMEPDF,
                ]);
            }
            else
            {
                return response()->json([
                    'success' => false,
                ]);
            }

            dd("transactionItem: ", $transactionItem);
        }
        else
        {
            dd("transactionItem could not be found ");
        }
    }
    catch(Exception $e)
    {
        $message = $e->getMessage();
        if (empty($message))
        {
            $message = "Preferred addressee details could not be updated. ";
        }

        DB::rollback();

        return response()->json([
            'error' => true,
            'message' => $message
        ], 500);
    }
}

Однако, когда я ввожу новые значения / обновляю существующее значение в одном из текстовых полей, а затем вкладываю его в него, я вижу в консоли браузера, что функция Angular вызывается и что она в свою очередь вызываетфункция PHP - но на вкладке Network -> Preview консоли я вижу вывод:

{success: true, addresseeName: null, addresseeNamePdf: null}

addresseeName: null

addresseeNamePdf: null

success: true

, поэтому по некоторым причинам кажется, что эти значения на самом деле не обновляются в базе данныхкак таковые.Почему это?Что я делаю неправильно?Как я могу убедиться, что значения базы данных корректно обновляются с помощью этой функции?

Редактировать

Похоже, @Devon, возможно, был прав с его комментарием об используемой функции... Я посмотрел файл user.php (где определено canAccessTransaction()), и была другая функция: userCanEditAccount(), которая, я думаю, вероятно, та, которую я хочу.Он определяется с помощью:

private static function userCanEditAccount($userId, $accountId)
{
    return Account::canUserEditAccount( $userId, $accountId );
}

, поэтому я изменил эту часть внутри функции updatePreferredAddresseeDetails() на:

if(User::userCanEditAccount( $request->userId, $request->accountId)
{
    $account = Account::find($request->accountId);
    $account->savePropertyValueByPropertyTag('ADDRESSEENAME', $request->input('contactPreferredName'));
    $account->savePropertyValueByPropertyTag('ADDRESSEENAMEPDF', $request->input('contactPreferredAddresseeName'));

    $account->save();


    dd("request: ", $request->all());
    DB::commit();

    return response()->json([
        'success' => true,
        'addresseeName' => $account->ADDRESSEENAME,
        'addresseeNamePdf' => $account->ADDRESSEENAMEPDF,
    ]);
}
else
{
    return response()->json([
        'success' => false,
    ]);
}

Но когда страница загружается сейчас, прежде чем я вообще с ней вообще взаимодействую, Я получаю сообщение об ошибке в консоли:

Ошибка разбора: синтаксическая ошибка, неожиданная ';'

в строке

$account = Account::find($request->accountId);

но я почти уверен, что ; должно быть там - что еще может быть причиной этого?

...