3

CodeIgniter を使用して、データベースからデータを収集するすべてのモデルで次のコードを見つけました。

// .. taken from function get_user_data($user_id)
// Select data
$user_data = $this->db->from('users')->where('id', $user_id)->get()->row();

// Check if we got any matches
if(isset($user_data->id)) {

  // Indeed we did, return the data found
  return $user_data

} else {

   // Nope, no data found
   return FALSE;

}

興味深い部分は、クエリが実際にデータを返したかどうかを確認するところです。私はすべてのクエリに対してそれを行っています。これにより、かなりの繰り返しコードが追加されます。

おそらくCodeIgniter関数をオーバーライドして、データが見つからない場合にそれらを返すFALSE方法はありますか? CodeIgniter がまだこれを処理していない理由がわからないので、おそらく何かが欠けています。

4

2 に答える 2

2

組み込みのショートカットの方法はあまりありません。マニュアルでさえ、結果を確認することを提案しています:

結果が得られない可能性のあるクエリを実行する場合は、最初に結果をテストすることをお勧めします。

$query = $this->db->query("YOUR QUERY");
if ($query->num_rows() > 0)
{
   // found results
}

クラス拡張をいつでも使用できます。

class MY_Model extends CI_Model {

    protected function _get_row($result)
    {
        return $result->num_rows() ? $result->row() : FALSE;
    }

}

モデルでの使用法:

function get_user_data($user_id)
{
    $user_data = $this->db->from('users')->where('id', $user_id)->get();
    return $this->_get_row($user_data);
}

extends MY_Model関数にアクセスしたいモデルだけが必要です。

別のオプションは、$this->db->get()代わりに結果を返し、コントローラーでチェックを行うことです (おそらくとにかく行う必要があります)。

于 2012-07-13T22:11:37.700 に答える
1

wesley murch オプションには同意しますが、個々の関数に対してクラス全体を作成することはお勧めできません。私の意見は、ヘルパーを使用することです。これを試すことができます:

ヘルパー ファイル:

function get_db_data($result)
{
    return ( $result->num_rows() > 0 ) ? $result->result_array() : false;
}

任意のモデルでこの関数を呼び出すことができます

$this->load->helper('helper_file_name');
$dbData = get_db_data(result_object);
于 2012-07-14T08:40:56.583 に答える