2013-08-21 67 views
0

當我從數據庫循環數據時,我需要從中重新查詢值。我直接從視圖查詢數據庫。我想知道這是我的代碼錯誤?如果錯了什麼是更好的方法?我可以直接從codeigniter中查看數據庫嗎?

foreach($data->result() as $row1) { 
     echo '<li>'; 
     echo $row1->Name; 
     echo '<ul>';  
     $this->db->select('Photo'); 
     $this->db->from('tblPhoto'); 
     $this->db->where('User_id', $row1->User_id); 
     $photo = $this->db->get(); 
     foreach($photo->result() as $row2) { 
      echo '<li>'; 
      echo $row2->Photo; 
      echo '</li>'; 
     } 
     echo '</ul>'; 
     echo '</li>'; 
    } 
+0

爲什麼不能在原始查詢中包含照片?或者在控制器中循環「$ data」並在那裏添加照片? – package

+0

獲取原始數據時,理想的地方將加入表格。另一種方式是使用一個比現有方式更好的幫助函數內部視圖。 – Nishanthan

回答

2

你這樣做的方式可行,但你可能想考慮分離你的代碼,使你的代碼更加可重用。例如:

< ~~~~控制器~~~~~>

// your_controller.php:  
$this->load->model('your_model'); 
$data = $this->your_model->get_data(); 
foreach($data as $key => $obj) 
{ 
    $data[$key]->photos = $this->your_model->get_photos($obj->User_id); 
} 
$this->load->view('test', array('my_data' => $data)); 

< ~~~~模型~~~~~>

// your_model.php 
function get_data() 
{ 
    return $this->db->get('yourTable')->result(); 
} 

function get_photos($user_id) 
{ 
    return $this->db->get_where('tblPhoto', array('User_id' => $user_id))->result(); 
} 

< ~~~~查看~~~~~>

your_view.php 
<?php foreach($my_data as $row1): ?> 
<li> 
    <?php echo $row1->Name;?> 
    <ul> 
     <?php foreach($row1->photos as $row2): ?> 
      <li><?php echo $row2->Photo; ?></li> 
     <?php endforeach; ?> 
    </ul> 
</li> 
<?php endforeach; ?> 
2

理想情況下,查看是不對的地方做到這一點。

首先,所有數據必須在控制器/模型之間進行處理,並且應該傳遞給查看。

如果你有一個場景想要在渲染後從視圖中獲取數據,你應該從視圖到控制器進行ajax調用,然後讓控制器從模型(數據層)獲取數據。

並響應來自控制器的數據來查看和反映HTML視圖中的變化,視所收到的數據是否需要進行更改而定。

這是一個如何應用MVC架構

+0

你是對的,但作爲一個附註:CodeIgniter沒有實現MVC。甚至沒有MVP。 –

1

@lyhong,您的代碼在編程上是正確的。

但是,正如你使用Codeiginter MVC,你應該遵循MVC標準。

查詢應該駐留在Models中。

以便它們可以重複使用。

另外,如果在查看文件的編寫查詢,應該會出現以下問題: - 如果你沒有得到 $row1->User_id 誤差應直接顯示在頁面上。

此外,它會緩慢加載您的視圖文件。

如果您堅持使用MVC標準,您將獲得可擴展性的巨大優勢。

相關問題