Kohana的ORM支持4中类型的对象关系:
belongs_to(多对一)
,has_many(一对多)
,has_many "through"
(多对多)和 has_one
(一对一).
belongs_to(
:多对一
)关系举例:"child"属于"parent";
基本用法:
这里使用文章和文章栏目的关系为例来说明
关系说明:
一个article 属于一个category (belongs_to)
一个category可以有多个article (has_many)
一个article有且只有一个content (has_one)
数据库设计
pre_articles(表名使用模型的负数形式) :
id
category_id (所属文章栏目id,这个字段的名称这样是固定的,当然可以不固定,但是后面的设计会比较麻烦)
……
pre_article_categorys:
id
……
pre_article_contents:
article_id (该字段固定)
content
……
在各个模型中的设计
Model_Article
/** * 关联文章内容 * @var array */ protected $_has_one = array( 'content' => array( 'model'=>'article_content', ), ); /** * 属于文章栏目 * @var array */ protected $_belongs_to = array( 'category' => array( 'model'=>'article_category', ), );
Model_Article_Content
protected $_belongs_to = array('article' => array());
Model_Article_Category/** * 一个栏目对应多个文章 * @var array */ protected $_has_many = array( 'articles' => array( 'model' => 'article', 'foreign_key' => 'category_id', ) );
因为数据设计的原因,这里需指明Model和foreign_key的值,不能使用默认的值
在代码中使用这些关系的例子
ORM::factory('article_category', 10)->articles->count_all(); //获取分类ID为10的栏目下的文章数 ORM::factory('article_category', 10)->articles->count_all(); //获取分类ID为10的栏目下的所有文章 //这两个函数都可以设置where条件 ORM::factory('article', 10)->content //获取文章id为10的文章的内容的对象模型, ORM::factory('article, 10)->category->catname // 获取文章id为10的文章所属栏目的栏目名称
至于多对多的对象模型关系暂时没有使用,等到使用的时候在加以总结。
Kohana中ORM对象关系的用法
最新推荐文章于 2019-05-16 09:47:57 发布