Хранение данных в сеансе может показаться только для хранения 1 части данных за раз - PullRequest
0 голосов
/ 08 ноября 2011

Я пытаюсь разрешить пользователю создавать короткий список, однако я добавляю одну вещь в короткий список, и она перезаписывает все остальное, что я делаю неправильно?

function validate_add_cart_item($id){

    $this->db->select('candidates.candidate_id, candidates.first_name, candidates.surname, candidates.DOB, candidates.talent, candidates.location, candidates.availability_order, candidates.availability, candidates.availability_comments, candidate_assets.url, candidate_assets.asset_size')
    ->from('candidates')
    ->join('candidate_assets', 'candidate_assets.candidates_candidate_id = candidates.candidate_id', 'left')
    ->where('candidate_assets.asset_size', 'small')
    ->where('candidate_assets.asset_type', 'image')
    ->where('candidates.candidate_id', (int)$id)
    ->limit(1)
    ->order_by('candidates.availability_order', 'DESC');

    $query = $this->db->get();

    //die($this->db->last_query());
    // Check if a row has been found
    if($query->num_rows > 0 ){
        foreach ($query->result() as $row)
        {
            $data = array(
                'id'      => $id,
                'name'    => $row->first_name." ".$row->surname,
                'location' => $row->location,
                'talent' => $row->talent,
                'image'  => $row->url
            );

            $this->session->set_userdata('shortlist', array($data));
            return TRUE;
        }

    // Nothing found! Return FALSE! 
    } else {
        return FALSE;
    }

Ответы [ 2 ]

1 голос
/ 08 ноября 2011
   foreach(...){
      // ...
     $this->session->set_userdata('shortlist', array($data));
   }

Вы перезаписываете свои предыдущие пользовательские данные несколько раз.Вместо этого вы должны создать массив и вызвать set_userdata один раз.

  $udata = array();
  foreach(...){
    // ...
    $udata []= $data;
  }
  $this->session->set_userdata('shortlist', $udata);

edit:

И ваш запрос возвращает только одну строку, вы, вероятно, хотите обновить массив, а не перезаписывать, вот как то так:

  $udata = $this->session->get_userdata('shortlist');
  foreach(...){
    // ...
    $udata []= $data;
  }
  $this->session->set_userdata('shortlist', $udata);
1 голос
/ 08 ноября 2011
$this->session->set_userdata('shortlist', array($data));

не добавляет $ data к shortlist, а перезаписывает его массивом, состоящим из одного элемента: текущие данные в $ data.
Возможно, вы (не проверено) хотите:

if($query->num_rows > 0 ) {
    $data = array();
    foreach ($query->result() as $row)
    {
        // append the new "record" to the array $data
        $data[] = array(
            'id'      => $id,
            'name'    => $row->first_name." ".$row->surname,
            'location' => $row->location,
            'talent' => $row->talent,
            'image'  => $row->url
        );
    }
    $this->session->set_userdata('shortlist', $data);
    return TRUE;
}
else {
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...