0

フレームワーク: CI

状況:

codeigniter でこの非常にイライラする問題があります。

ここにコードがあります:(コントローラー)

class sampleController extends CI_Controller {

function index() {
    data['message'] = 'something';

    data['js'] = array('script1.js', 'script2.js');
    data['css'] = array('style1.css', 'style2.css', 'style3.css');

    $this->load->model('user_model');
    $user = $this->input->post('username');

    data['user_id'] = $this->user_model->getUserIdByUsername($user);
    data['user_info'] = $this->user_model->getAllUserInfo($user);

    $this->load->view('someview', $data);

}

}

さて、私のコントローラに行く、私はいくつかのデータをjs渡しましcssuser_iduser_info

ここに私のモデルのメソッドがあります:

getUserIdByUsername($user) {
$this->db->select("id");
$this->db->where("username", $user);
$result = $this->get("users");
return $result->row();

}

getAllUserInfo($user) {
$this->db->select("first_name, last_name, age");
$this->db->where("username", $user);
$result = $this->get("users");
return $result->row();
}

コントローラーから渡されたすべての変数にアクセスしようとすると、ビューで問題が発生します

  1. エコー$messageを試みた場合、次のように正しくレンダリングされます =something
  2. foreach$jsを使用してそれぞれをループしようとすると$css、このようになります

    foreach($js as $key){//echo script here}

    foreach($css as $key){// echo link rel stylesheet here}

それはすべて同じように<script src='script1.js'></script><script ...></script>反復するように正しくレンダリングされます$jscss

しかし、 $user_id をエコーアウトしようとした場合。. そうはなりません。それはオブジェクトです。

問題を解決するために私がしたことは. . <?php foreach($user_id as $id){} ?>この場合 $id をエコーできますとにかくそこにあるので、面倒な foreach なしでシンプルにエコーできます。

に来たときにこれを行っても問題ないことを理解し$user_infoましforeach($user_info as $key => $value){$info[$key]=$value} たが、ビューでそれを行うより良い方法はありますか?

オブジェクトの代わりに、ビューが使用できるようになる前に配列が送信されるのでしょうか?

どうもありがとう

編集:同じメソッド名を修正。

4

4 に答える 4

3

$result->row();選択したすべてのフィールドを含むオブジェクトを返します。SELECTフィールドを編集しただけでidは、戻り値は変わりません。代わりにこれを試してください:

$data['user_id'] = $this->user_model->getUserIdByUsername($user)->id;

また:

getUserIdByUsername($user) {
    $this->db->select("id");
    $this->db->where("username", $user);
    $result = $this->get("users");
    return $result->row()->id;
}

オブジェクトの代わりに配列が必要な場合のクエリ結果の生成に関する詳細については、CI ドキュメントを確認してください。

result_array()

この関数は、クエリ結果を純粋な配列として返すか、結果が生成されない場合は空の配列を返します。

row_array()

配列を返す点を除いて、上記の row() 関数と同じです。

于 2012-10-12T19:25:45.417 に答える
2

を使用する{$user_id[0]['id']}と、ビューにユーザー ID が表示されます。ところで、あなたの質問では、両方のメソッド名が同じです.2番目のものはそうあるべきだと思います.getAllUserInfo($user)

于 2012-10-12T18:54:41.647 に答える
1

おっしゃる通り、オブジェです。そのため、同じようにフィールドにアクセスします。

echo $user_id->id;
于 2012-10-12T19:26:08.010 に答える
1

モデルで row_array 関数を使用すると、関心がある場合はオブジェクトではなく配列として返されます。ここでクエリ結果の生成について読むことができます: http://ellislab.com/codeigniter/user_guide/database/ results.html

于 2012-10-12T19:54:07.133 に答える