我的模型(由Jamie Rumbelow撰写) - 如何在模型中使用“where”

时间:2012-08-22 11:48:03

标签: codeigniter activerecord model

我已经集成了Jamie Rumbelow My Model,用于使用github中的codeigniter进行活动记录查询 - https://github.com/jamierumbelow/codeigniter-base-model

我想使用普通的codeigniter语法来执行具有多个参数的位置但不确定如何使用标准codeigniter语法,如下所示:

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

有人可以建议如何使用此MY_Model完成此操作吗?

例如......这有效,但只允许一列和一列;它的价值 - 我将如何使用多列和&值

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

4 个答案:

答案 0 :(得分:13)

MY_Model get_方法接受与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();

这为我们提供了一个更难忘,更清晰,更人性化的语法。

答案 1 :(得分:4)

对它进行排序 - 对于其他任何有相同问题的人 - 你需要传递一个数组。

$this->news_model->get_many_by( 
          array('active' => 1, 'another_column'=> 'value')
        );

答案 2 :(得分:3)

This guide has everything you need to use MY_Model - 将其视为非官方手册/文档!

答案 3 :(得分: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"%