zoukankan      html  css  js  c++  java
  • curd




    1、绑定参数

    可以避免 SQL 注入攻击 ,DAO操作涉及方法:bindParam() 和 bindValue()


    2、relations中写条件查询时字段需要加表别名

    3、关联查询选项
    之前我们提到额外的参数可以被指定在关联声明中。这些选项,指定为 name-value 对,被用来定制关联查询。它们被概述如下:
    select: 为关联 AR 类查询的字段列表。默认是 '*', 意味着所有字段。查询的字段名字可用别名表达式来消除歧义(例如:COUNT(??.name) AS nameCount)。
    condition: WHERE 子语句。默认为空。注意, 列要使用别名引用(例如:??.id=10)。
    params: 被绑定到 SQL 语句的参数. 应当为一个由 name-value 对组成的数组()。
    on: ON 子语句. 这里指定的条件将使用 and 操作符被追加到连接条件中。此选项中的字段名应被消除歧义。此选项不适用于 MANY_MANY 关联。
    order: ORDER BY 子语句。默认为空。注意, 列要使用别名引用(例如:??.age DESC)。
    with: 应当和此对象一同载入的子关联对象列表. 注意, 不恰当的使用可能会形成一个无穷的关联循环。
    joinType: 此关联的连接类型。默认是 LEFT OUTER JOIN。
    aliasToken:列前缀占位符。默认是“??.”。
    alias: 关联的数据表的别名。默认是 null, 意味着表的别名和关联的名字相同。
    together: 是否关联的数据表被强制与主表和其他表连接。此选项只对于HAS_MANY 和 MANY_MANY 关联有意义。若此选项被设置为 false, ......(此处原文出错!).默认为空。此选项中的字段名以被消除歧义。
    having: HAVING 子语句。默认是空。注意, 列要使用别名引用。
    index: 返回的数组索引类型。确定返回的数组是关键字索引数组还是数字索引数组。不设置此选项, 将使用数字索引数组。此选项只对于HAS_MANY 和 MANY_MANY 有意义
    此外, 下面的选项在延迟加载中对特定关联是可用的:
    group: GROUP BY子句。默认为空。注意, 列要使用别名引用(例如:??.age)。 本选项仅应用于HAS_MANY 和 MANY_MANY 关联。
    having: HAVING子句。默认为空。注意, 列要使用别名引用(例如:??.age)。本选项仅应用于HAS_MANY 和 MANY_MANY 关联。
    limit: 限制查询的行数。本选项不能用于BELONGS_TO关联。
    offset: 偏移。本选项不能用于BELONGS_TO关联。
    下面我们改变在 User 中的 posts 关联声明,通过使用上面的一些选项:
    class User extends CActiveRecord
     
    {
    public function relations()
    {
    return array(
     
    'posts'=>array(self::HAS_MANY, 'Post', 'author_id',
    'order'=>'posts.create_time DESC',
    'with'=>'categories'),
    'profile'=>array(self::HAS_ONE, 'Profile', 'owner_id'),
    );
    }
    }
    现在若我们访问 $author->posts, 我们将得到用户的根据发表时间降序排列的 posts. 每个 post 实例也载入了它的分类。
    4、为字段名消除歧义
    当一个字段的名字出现在被连接在一起的两个或更多表中,需要消除歧义(disambiguated)。可以通过使用表的别名作为字段名的前缀实现。
    在关联AR查询中,主表的别名确定为 t,而一个关联表的别名和相应的关联的名字相同(默认情况下)。 例如,在下面的语句中,Post 的别名是 t ,而 Comment 的别名是 comments:
    $posts=Post::model()->with('comments')->findAll();

    在假设 Post 和 Comment 都有一个字段 create_time , 我们希望取出 posts 及它们的 comments
    ,排序方式是先根据 posts 的创建时间,然后根据 comment 的创建时间。 我们需要消除create_time 字段的歧义,如下:
    $posts=Post::model()->with('comments')->findAll(array(
     
    'order'=>'t.create_time, comments.create_time'
    ));
    默认情况下,Yii 自动为每个关联表产生一个表别名,我们必须使用此前缀 ??. 来指向这个自动产生的别名。 主表的别名是表自身的名字。

  • 相关阅读:
    Androidproject文件下assets目录与res目录的差别
    tomcat 实现域名crm.test.com訪问
    全文索引--自己定义chinese_lexer词典
    Elasticsearch 之 慘痛部署(分片移位)
    iOS开发核心语言Objective C —— 全部知识点总结
    [LeedCode OJ]#28 Implement strStr()
    【Django】 gunicorn部署纪要
    PKI(公钥基础设施)基础知识笔记
    Cocoapods Undefined symbols for architecture armv7sarm64
    Android开发Tips(3)
  • 原文地址:https://www.cnblogs.com/ldms/p/3045413.html
Copyright © 2011-2022 走看看