3

githubのcodeigniterでアクティブレコードクエリを実行するために、Jamie RumbelowMyModelを統合しました-https ://github.com/jamierumbelow/codeigniter-base-model

複数のパラメーターを使用してwhereを実行するために通常のcodeigniter構文を使用したいのですが、次のように標準のcodeigniter構文を使用する方法がわかりません。

$this->db->where('active', 1);
$this->db->where('type', 'news');

このMY_Modelを使用してこれがどのように行われるかを誰かが提案できますか?

たとえば...これは機能しますが、1つの列とその値のみが許可されます-複数の列と値でこれを行うにはどうすればよいですか?

$this->news_model->get_many_by('active', 1);
4

4 に答える 4

14

MY_Modelget_メソッドは、CodeIgniterのクエリビルダー(以前のActive Record)と同じパラメーターを受け入れますwhere。これは、配列を通過できることを意味します。

$this->news_model->get_many_by(array( 'key' => 'value', 'other_key' => 'value' ));

これよりも複雑なことをしている場合は、独自のスコーピングメソッドを作成することもできます。スコープメソッドは、 MY_Modelで検索を行うための*正しい*方法です。

スコーピングメソッドは、検索にコンテキストと読みやすさを提供します。あなたの例では、アクティブなニュース記事を見つけているので、それらの正確な記事のモデルにスコープメソッドを作成できます。

class News_model extends MY_Model
{
    public function active_news()
    {
        $this->db->where('active', 1);
        $this->db->where('type', 'news');

        return $this;
    }
}

を返すので$this、これらのメソッドを他のMY_Modelメソッドにチェーンできます。私たちのコントローラーでは:

$this->data['news'] = $this->news_model->active_news()->get_all();

これにより、より記憶に残り、より明確で人道的な構文を使用できるようになります。

于 2012-08-29T15:22:36.463 に答える
4

それをソートしました-同じ問題を抱えている他の人のために-あなたは配列を渡す必要があります。

$this->news_model->get_many_by( 
          array('active' => 1, 'another_column'=> 'value')
        );
于 2012-08-22T11:54:39.370 に答える
3

このガイドには、MY_Modelを使用するために必要なすべてが含まれています-非公式のマニュアル/ドキュメントと考えてください!

于 2012-08-22T13:51:35.783 に答える
0

複数の条件に対して次のようなことを実行し、LIKE操作を使用できます。

$conditions = [
        'id' => $id
        ,'created_at LIKE' => $date.'%'
];
$object = $this->model1->get_by($conditions);

これはあなたにクエリを与えるでしょう:

SELECT * FROM table WHERE id = "$id" AND created_at LIKE "$date"%
于 2016-07-01T19:36:27.593 に答える