私のアプリケーションでは、サイドバー メニュー リストにデータベース テーブルの行を入力しようとしています。より具体的には、コーチがログインしているユーザーと同じ user_id を持つチーム名を取得しようとしています。ログインしているコーチのチームをメニューに一覧表示したいと考えています。
私のモデルでは、アクティブ レコードを使用して目的のクエリ結果を取得しています。
public function get_team()
{
$this->db->select('teamname')->from('teams')->where('coaches', $this->session->userdata('user_id'));
$this->db->order_by('teamname', 'asc');
$query = $this->db->get();
if($query->num_rows() > 0)
{
foreach($query->result_array() as $row)
{
$data[] = $row;
}
return $data;
}
}
コントローラーでは、配列データをビューに渡す方法がわかりません。私のインデックス関数では、これを行います:
public function index()
{
if (!$this->tank_auth->is_logged_in()) {
redirect('/auth/login/');
} else
{
$data['title'] = 'Team';
$data['main_content'] = 'team_v';
$data['username'] = $this->tank_auth->get_username();
$data['coach'] = $this->tank_auth->is_admin();
$this->load->vars($data);
$this->load->view('includes/template');
}
}
そして、関連するコントローラー関数で、データをサイドバー ビューに直接送信しようとします (これは、以前に読み込まれたテンプレート ファイルに含まれています)。
public function get_team()
{
$data = array(
'result' => $this->team_m->get_team());
$this->load->view('includes/sidebar', $data);
}
ビュー コードは標準の foreach を実行し、次のようになります。
<li>Teams</li>
<ul>
<?php /* if (empty($result)): */ ?>
<li>Create a team</li>
<?php /* else: */ ?>
<?php foreach ($result as $row): ?>
<li><?php echo $row['teamname'];?></li>
<?php endforeach; ?>
<?php /* endif; */ ?>
</ul>
<li>Messages</li>
<li>My profile</li>
<li><a href="<?php echo base_url('index.php/auth/logout'); ?>">Logout</a></li>
この方法で $data 配列をサイドバーに送信しても機能しません。また、テンプレート内のすべてのビューを手動でロードし、データをビューに渡そうとしましたが、役に立ちませんでした。どのように渡しても、「foreach()に無効な引数が指定されました」というエラーが表示されます。これは、配列にデータが返されないことを意味します。
ただし、コントローラー関数でこれを行うと、次のようになります。
public function get_team()
{
$data = array(
'result' => $this->team_m->get_team());
$this->load->view('get_team_v', $data);
}
上記のサイドバー ビューとまったく同じコードで get_team_v ビューを作成すると、目的の結果が完全にリストされます。また、affected_rows テストを実行し、クエリ部分が良好であることを確認しました。テンプレート化されたサイドバー ビューにも配列データが一覧表示されるようにするにはどうすればよいですか?