3

我已经集成了 Jamie Rumbelow 我的模型,用于使用来自 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

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 回答