Kohana ORM从多个类别中获取帖子

时间:2013-09-27 13:48:39

标签: php orm kohana kohana-orm

我正在使用Kohana 3.3 ORM。我定义了以下模型:

class Model_Post extends ORM {

    protected $_primary_key = 'ObjID';

    protected $_has_many = array(
        'categories' => array(
            'model'   => 'Category',
            'through' => 'posts2categories',
            'foreign_key' => 'post_id',
        ),
    );
}

class Model_Category extends ORM {

    protected $_has_many = array(
        'posts' => array(
            'model'   => 'Post',
            'through' => 'posts2categories',
            'foreign_key' => 'category_id',
        ),
    );
}

现在,获取属于ONE类别的所有帖子非常简单:

$posts = $categoriesQuery->where('category_id','=',1)->find()->posts->find_all();

我想知道如何获取属于类别1或2的所有帖子。 我尝试过很多东西,而且没有它们起作用。我怎样才能使它工作?我有办法使用ORM模块而不是直接的SQL查询吗?

2 个答案:

答案 0 :(得分:3)

您可以向Model_Post添加一个函数,该函数将返回属于多个(或一个)类别的所有帖子。

public function in_categories($categories) 
{
        return $this->join("posts2categories")->on("posts2categories.post_id", "=", "posts.id")
            ->join("categories")->on("category.id", "=", "posts2categories.category_id")
            ->where("categories.id", "IN", $categories);
}

这将返回类别1,3和5中的所有帖子。

ORM::factory("Post")->in_categories(array(1, 3, 5))->find_all();

答案 1 :(得分:0)

如果我正确地理解你的问题,你只需要两个条件:

...    
$data = DB::select('*')->from('table_name')
      ->where_open()
          ->where('category_id','=',1)
          ->or_where('category_id','=',2)
      ->where_close()
...