У меня есть приложение Laravel, и на одной из страниц я хочу позволить пользователю иметь возможность обновлять некоторые значения в базе данных, вводя / изменяя данные в нескольких текстовых полях.
Угловая функция, вызываемая (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}
имя_адреса: ноль
addresseeNamePdf: null
успех: правда
поэтому по какой-то причине кажется, что эти значения на самом деле не обновляются в базе данных. Почему это? Что я делаю неправильно? Как я могу убедиться, что значения базы данных корректно обновляются с помощью этой функции?
редактировать
Похоже, что @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);
но я уверен, что ;
должно быть там — что еще может быть причиной этого?
Задача ещё не решена.
Других решений пока нет …