4

以下のように、データベースから適切なデータを選択するモデルがあります。

<?php
    class vacancies extends CI_Model{

        function vacancies()
        {
            $query = $this->db->query("SELECT * FROM ecc_vacancies_vac WHERE active_vac = 1 AND end_vac >= CURDATE() ORDER BY date_vac DESC");

            if($query->num_rows() >= 1){
                foreach($query->result() as $row){
                    $data[] = $row;
                }
                return $data;
            }
        }

    }  

以下のように、ビューに送信する前にこのデータを処理するコントローラー:

function index()
{
    //check if there any available vacancies

    $this->load->model('vacancies');
    $data['vacancies'] = $this->vacancies->vacancies();
    // then i load the views here 
 }

私がする必要があるのは、コントローラーで返された行の総数を知ることです。これにより、後で使用するためにその数をビューに送信できます。

アクティブなレコードを使用するときは、次のコード行を使用していました。

$data['num_rows'] = $$data['vacancies']->num_rows();

私の場合、どのように定義できますか?

4

4 に答える 4

3

PHPが救いの手を差し伸べます。モデルメソッドは配列を返すため、単純なcount()呼び出しで行の総数を取得します。

したがって、たとえば、

$this->load->model('vacancies');
$data['vacancies'] = $this->vacancies->vacancies();
$data['number_of_vacancies'] = count($data['vacancies']);
于 2012-06-20T21:32:26.177 に答える
2

モデルから配列を返すので、コントローラーでPHPのcount()関数を使用できます。

$data['num_rows'] = count($data['vacancies']);

モデルにも問題があります。結果がない場合、関数は配列を返さないため、後で配列のように扱うと問題が発生する可能性があります。ifステートメントの前に$dataの初期化を追加してから、常に空の配列を返す必要があります。

function vacancies()
{
    $query = $this->db->query("SELECT * FROM ecc_vacancies_vac WHERE active_vac = 1 AND end_vac >= CURDATE() ORDER BY date_vac DESC");

    $data = array();
    if ($query->num_rows() >= 1){
        foreach ($query->result() as $row){
            $data[] = $row;
        }
    }
    return $data;
}
于 2012-06-20T21:29:57.080 に答える
2

num-rows(); モデル内の「クエリ部分」で作業している場合にのみ機能します。DBオブジェクトを参照します。すでにデータを返しています。これを試して:

 $data['num_rows'] = count($data['vacancies']);
于 2012-06-20T21:33:55.330 に答える