Kohana中ORM对象关系的用法

8 篇文章 0 订阅

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的文章所属栏目的栏目名称


至于多对多的对象模型关系暂时没有使用,等到使用的时候在加以总结。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值