yii 模型relations查询
yii 模型relations查询
别人说我名字很长 发表于4年前
yii 模型relations查询
  • 发表于 4年前
  • 阅读 86
  • 收藏 0
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

摘要: yii 模型relations查询

申明关系

两张表之间的关系无非三种:一对多;一对一;多对多; 在AR中,定义了四种关系:

关系 定义 例子
BELONGS_TO A和B的关系是一对多,那么B属于A Post属于User
HAS_MANY A和B之间的关系是一对多,那么A有多个B User有多个Post
HAS_ONE 这是HAS_MANY的一种特殊情况,A至多有一个B User至多有一个Profile
MANY_MANY 这个对应多对多的情况,在AR里会将多对多以BELONGS_TO和HAS_MANY的组合来解释 Post和Category

在AR中通过重写CActiveRecord类的relations()方法来申明关系;这个方法返回一个关系配置的数组;一个数组无素代表一个单独的关系,格式如下:

在AR中通过重写CActiveRecord类的relations()方法来申明关系;这个方法返回一个关系配置的数组;一个数组无素代表一个单独的关系,格式如下:

'VarName'=>array('RelationType','ClassName','ForeignKey', ...additional options)

Var Name 关系名
Relation Type 四种关系:self::BELONGS_TO, self::HAS_ONE, self::HAS_MANY, self::MANY_MANY
Class Name 代表当前AR类要关联的那个AR类名
Foreign Key 实现关系的外键, 有可能有多个,即列名

下面的代码表示用来定义Post, User之间的关系

class Post extends CActiveRecord
{
    ......
 
    public function relations()
    {
        return array(
            'author'=>array(self::BELONGS_TO, 'User', 'author_id'),
            'categories'=>array(self::MANY_MANY, 'Category',
                'tbl_post_category(post_id, category_id)'),
        );
    }
}
 
class User extends CActiveRecord
{
    ......
 
    public function relations()
    {
        return array(
            'posts'=>array(self::HAS_MANY, 'Post', 'author_id'),
            'profile'=>array(self::HAS_ONE, 'Profile', 'owner_id'),
        );
    }
}



使用时,如果$author代表一个USER的AR实例,可以使用$author->posts来获取到它相关的所有的Post对象。

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 54
博文 243
码字总数 97391
×
别人说我名字很长
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: