Aug 21

Cakephp 学习日志 (二) 不指定

bkkkd , 07:54 , 开发应用 , 评论(0) , 引用(0) , 阅读(42009) , Via 本站原创 | |

hasMany关联的定义与查询
我们已经为User和Profile对象建立起了双向关联,那让我们开始为User和Comment对象之间建立关联吧,先看下面的示例代码:

/app/models/user.php hasMany  
<?php  
class User extends AppModel  
{  
    var $name = 'User';  
    var $hasMany = array('Comment' =>  
                         array('className'     => 'Comment',  
                               'conditions'    => 'Comment.moderated = 1',  
                               'order'         => 'Comment.created DESC',  
                               'limit'         => '5',  
                               'foreignKey'    => 'user_id',  
                               'dependent'     => true,  
                               'exclusive'     => false,  
                               'finderQuery'   => ''  
                         )  
                  );  
  
    // Here's the hasOne relationship we defined earlier...  
    var $hasOne = array('Profile' =>
                        array('className'    => 'Profile',
                              'conditions'   => '',
                              'order'        => '',
                              'dependent'    =>  true,
                              'foreignKey'   => 'user_id'  
                        )  
                  );  
}  
?>

$hasMany array用来定义User包含多条Comment这样的关联关系。还是老样子,介绍一下包含的key,但是一些和之前同样含义的key我将不再赘述详细。

    * className (required):关联对象类名。
    * conditions: 关联对象限定条件。
    * order: 关联对象排序子句。
    * limit:因为是一对多关系,所以可以通过limit来限定检索的关联对象数量。比如我们可以只关联5条评论记录。
    * foreignKey:外键字段名。仅当不遵循命名约定时起用。
    * dependent:是否级联删除。(该动作可能会造成数据的误删除,请谨慎设定)
    * exclusive:如果设为true,所有的关联对象将在一句sql中删除,model的beforeDelete回调函数不会被执行。但是如果没有复杂的逻辑在级联删除中,这样的设定会带来性能上的优势。(译注:Cake的确方便,但是使用时一定要记住控制sql语句发送数量)
    * finderQuery:定义一句完整的sql语句来检索关联对象,能够对关联规则进行最大程度上的控制。当关联关系特别复杂的时候,比如one table - many model one model - many table的情况下,Cake无法准确的替你完成映射动作,需要你自己来完成这个艰巨的任务。

现在看一下如何在检索user对象的时候一并读回comment对象集合

$user = $this->User->read(null, '25');  
print_r($user);  
  
//output:  
  
Array  
(  
    [User] => Array  
        (  
            [id] => 25  
            [first_name] => John  
            [last_name] => Anderson  
            [username] => psychic  
            [password] => c4k3roxx  
        )  
  
    [Profile] => Array  
        (  
            [id] => 4  
            [name] => Cool Blue  
            [header_color] => aquamarine  
            [user_id] = 25  
        )  
  
    [Comment] => Array  
        (  
            [0] => Array  
                (  
                    [id] => 247  
                    [user_id] => 25  
                    [body] => The hasMany assocation is nice to have.  
                )  
  
            [1] => Array  
                (  
                    [id] => 256  
                    [user_id] => 25  
                    [body] => The hasMany assocation is really nice to have.  
                )  
  
            [2] => Array  
                (  
                    [id] => 269  
                    [user_id] => 25  
                    [body] => The hasMany assocation is really, really nice to have.  
                )  
  
            [3] => Array  
                (  
                    [id] => 285  
                    [user_id] => 25  
                    [body] => The hasMany assocation is extremely nice to have.  
                )  
  
            [4] => Array  
                (  
                    [id] => 286  
                    [user_id] => 25  
                    [body] => The hasMany assocation is super nice to have.  
                )  
  
        )  
)  

你同样可以为Comment加上关联User对象的belongsTo关联,但是在文档中就不再详细描述了
内文分页: [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
Tags:
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]