2014-02-07 2 views
0

У меня есть модель с этой функциейОбновление таблицы с Еогеасп в CodeIgniter

function dummy_system(){ 
    $this->db->select('SKU, size, color') 
      ->from('order_detail') 
      ->where('order_id',"52F4CC00C32"); 

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

    // 2nd query 
    foreach($query->result() as $row): 
     $SKU = $row->SKU; 
     $size = $row->size; 
     $color = $row->color; 

     $this->db->select('stock_quantity') 
       ->from('item_stock') 
       ->join('items','items.stock_id = item_stock.stock_id') 
       ->join('item','item.item_id = items.item_id') 
       ->where('item.SKU',$SKU) 
       ->where('item_stock.size',$size) 
       ->where('item_stock.colour',$color); 

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

    if($query->num_rows() > 0){ 
    return $query->result(); 
    } 
    else{ 
     return array(); 
    } 
} 

Этот контроллер

public function index() 
{ 
    $this->load->model('nekogear'); 
    $data['dummy'] = $this->nekogear->dummy_system(); 

    echo "<pre>"; 
    die(print_r($data, TRUE)); 
} 

и это результат, который показывает только последний запрос.

Array 
(
    [dummy] => Array 
     (
      [0] => stdClass Object 
       (
        [stock_quantity] => 5 
       ) 

     ) 

) 

мой вопрос заключается в том, чтобы сделать цикл по каждому элементу в модели, чтобы получить все результаты запроса с одним order_id? (Ток order_id в два ряда с одинаковым order_id) с этим кодом (которые мне нужно SKU, размер & цветовых значений в следующих запросах)

$this->db->select('SKU, size, color') 
      ->from('order_detail') 
      ->where('order_id',"52F4CC00C32"); 

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

    if($query->num_rows() > 0){ 
     return $query->result(); 
    } 
    else{ 
     return array(); 
    } 

он может получить результат

Array 
(
    [dummy] => Array 
     (
      [0] => stdClass Object 
       (
        [SKU] => Nisekoi-01 
        [size] => L 
        [color] => Biru 
       ) 

      [1] => stdClass Object 
       (
        [SKU] => Wooser-01 
        [size] => XL 
        [color] => Kuning 
       ) 

     ) 

) 

Учитывая это, я думаю, что проблема заключается в петле foreach внутри моей модели, и я не знаю, как это решить.

спасибо за ваше время и извините за мой плохой английский.

+0

можно попробовать var_dumping '$ this-> db-> last_query();' в вашем Еогеасп, чтобы увидеть, что запросы, которые он пытается делать. Вы также можете попробовать вызвать ['enable_profiler();'] (http://ellislab.com/codeigniter%20/user-guide/libraries/output.html). Я думаю, что это выводит ваши запросы. Это, конечно же, поможет вам отладить ваши запросы и посмотреть, правильно ли они вызываются. –

+0

@JosephMarikle, мой последний результат запроса: Array ( [фиктивный] => SELECT 'stock_quantity' FROM (' item_stock') JOIN '' 'деталей ON items'.'stock_id' =' item_stock'.'stock_id ' JOIN' item' ON 'item'.'item_id' =' items'.'item_id' WHERE 'item'.'SKU' = 'Wooser-01' И' item_stock'.'size' = 'XL' И 'item_stock'.'colour' = 'Kuning' ) – ceroberoz

ответ

0

Вы можете создать массив и цикл через него, чтобы получить акции:

$this->db->select('SKU, size, color') 
->from('order_detail') 
->where('order_id',"52F4CC00C32"); 

$query = $this->db->get(); 
$skus = array(); 
foreach($query->result() as $row): 
    $skus[$row->SKU] = array('sku' => $row->SKU, 'size' = $row->size, 'color' = $row->color); 
endforeach; 

$return = array(); 

foreach($skus as $sku => $data): 
    $SKU = $data['sku']; 
    $size = $data['size']; 
    $color = $data['color']; 

    // same query 

    $return[] = $query->result(); 
endforeach: 

return $return; 
+0

он по-прежнему отображает только последний запрос. Массив ( [фиктивный] => Массив ( [0] => StdClass Object ( [stock_quantity] => 5 ) ) ) – ceroberoz

+0

@ceroberoz попробовать новый отредактированный код. – dhavald

+0

он работает! Благодарю. – ceroberoz

Смежные вопросы