Сообщение: невозможно использовать объект типа stdClass в качестве массива в CodeIgnitor - PullRequest
0 голосов
/ 20 декабря 2018

Я использую CodeIgniter, я возвращаю более одного значения в модели, поэтому я сделал, как

return array('true' =>1,'customer_id' => $result->customer_id);

, а в контроллере я отображаю как

$true=$result['true'];
$custId=$result['customer_id'];

Такв этом нет проблемы.

Теперь давайте поговорим подробнее

В модели у меня есть такая логика

//sql query
if ($result) {
    if ($result->password_change == 0) {
         return array('true' =>1,'customer_id' => $result->customer_id);//multiple returns
    }
    else{
       return $result;
    }
}
else{return false;}

В контроллере

 $result=$this->Member_model->check_data(parameters);
 $true=$result['true'];
 $custId=$result['customer_id'];

 if ($result) {
     if($true == 1){
         //some code here
     }
     else{
         //some code here
     }
 }
 else{
 }

Это мой второй код.

if ($result) {
  if ($result - > password_change == 0) {
    if ($result - > id == $id) {
      return array('true' => 1, 'customer_id' => $result - > customer_id); //return more then 2
    } else {
      return false;
    }
  } else {
    if ()) // some condition
  {
    return (array) $result;
  } else {
    return false;
  }
}
} else {
  return false;
}

Я получаю сообщение об ошибке

"Сообщение: невозможно использовать объект типа stdClass в качестве массива"

Потому что при возврате условия if (из модели) оно работает, но когда оно возвращает другое (я имею в виду $ result из модели), я получаю сообщение об ошибке, потому что оно не получает $ result ['true'].

Надеюсь, вы понимаете мою проблему.Не могли бы вы помочь мне в этом вопросе?

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018
Yeah, ok this is solution for multiple conditions : 

    $this->db->select('*'); // Here your column name
    $this->db->from('members'); // Table name
    $this->db->where($login_access); // Here your condition
    $query = $this->db->get();

    $result = $query->result_array();
    $query = $this->db->get('customer'); // Your code above if condition
    $result = $query->result_array(); // Get data in array Format using **result_array()**
        if ($result) {
          if ($query->num_rows() > 0) { // You have to change condition from **$result['password_change ']** To **$query->num_rows() > 0**
            if ($result - > id == $id) { // Also change here condition from **$result - > id** To $result['id']
              return array('true' => 1, 'customer_id' => $result['customer_id']); //Also change here from **$result - > customer_id** To $result['customer_id']
            } else {
              return false;
            }
          } else {
            if () // some condition
          {
            return $result; // Also Change here from **return (array) $result** To $result
          } else {
            return false;
          }
        }
        } else {
          return false;
        }
0 голосов
/ 20 декабря 2018

У вас есть два варианта.Либо: ВСЕГДА возвращайте массив, либо возвращайте ArrayObject:

Всегда возвращайте массив

В другом случае приведите $result в виде массива:

//sql query
if ($result) {
    if ($result->password_change == 0) {
         return array('true' =>1,'customer_id' => $result->customer_id);//multiple returns
    }
    return (array) $result;
}
return false;

Всегдавернуть ArrayObject

Не зная, возвращает ли эта модель результат где-либо еще в вашем приложении, я понятия не имею, ожидает ли другой код $result объекта.Приведение в виде массива может повредить ваш код в другом месте.Давайте преобразуем $result из stdClass в ArrayObject:

//sql query
if ($result) {
    if ($result->password_change == 0) {
         return array('true' =>1,'customer_id' => $result->customer_id);//multiple returns
    }
    return new \ArrayObject($result, \ArrayObject::ARRAY_AS_PROPS);
}
return false;

Этот подход позволит вам позвонить $result['test'] AND $result->test.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...