Передача значений массива от контроллера к модели для операций вставки / обновления

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

Мой контроллер:

$transaction_id= filter_input(INPUT_POST, 'pay_id');
$api = new Api('ID', 'key');   
//getting object of transation
$payment = $api->payment->fetch($transaction_id);
//passing payment details to database
$this->Payment_model->set_payment($transaction_id,true);

Текущая структура массива $payment:

pay\Api\Payment Object ( [attributes:protected] => Array ( [id] => pay_BVzDNK3vsp4Owl [entity] => payment [amount] => 35400 [currency] => INR [status] => authorized [order_id] => ) )

Мой pay_model.php:

  public function set_payment($payment,$first)
  {
      $data = array(
          'id' => $id,
          'entity' => $entity,
          'amount' => $amount,
          'currency' => $currency,
          'status' => $status,
          'order_id' => $order_id,
          'updated_at' => date('Y-m-d H:i:s')
      );
      if ($first == TRUE) {
          //print_r($data);
          //  echo "breakpoint--i am in set user model id 0";
          return $this->db->insert('payments', $data);
      } else {
          //echo "breakpoint--i am in set user model id not 0";
          $this->db->where('id', $id);
          return $this->db->update('payments', $data);
      }
  }

Проблема: Мой массив $ data всегда принимает значения NULL. Как использовать данные, которые я получаю, и передать модели для операций вставки / обновления.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
76
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Значение массива $data не определено в области действия функции (что дает вам значение NULL).

У вас 2 ошибки. Сначала отправляем правильные данные в функцию set_payment:

$payment = $api->payment->fetch($transaction_id);
$this->Payment_model->set_payment($transaction_id,true);

Я думаю, что вторая строка должна быть:

$this->Payment_model->set_payment($payment,true);

Как отправка $payment, а не $transaction_id.

Вторая ошибка - при использовании данных в функции set_payment. При создании $data вы должны использовать его как:

'id' => $payment['id'], //and no just $id 
'entity' => $payment['entity'],//and no just $entity as those var not exist in this scope
// and so on...

Спасибо решено. Передача идентификатора транзакции была опечаткой, но основное предположение заключалось в том, что я думал, что эти переменные будут в пределах области видимости, как мы передаем массив $ data в представление из контроллера. Спасибо.

user4382574 10.12.2018 09:02

в set_payment():

ваш массив данных должен выглядеть так:

 $data = array(
        'id' => $payment['id'],
        'entity' => $payment['entity'],
        'amount' => $payment['amount'],
        'currency' => $payment['currency'],
        'status' => $payment['status'],
        'order_id' => $payment['order_id'],
        'updated_at' => date('Y-m-d H:i:s'));

Другие вопросы по теме