Aug 21

Cakephp 学习日志 (二) 不指定

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


read
  string $fields
  string $id

根据$fields中的属性名从当前对象中读出对应的值,或者是$id指定的对象中读取。注意:read()方法仅级联读取该对象的一级关联对象,不管 model中的$recursive的值为多少。如果你是希望获取所有级联属性的话,请使用find()或者findAll()方法。


query
  string $query
  
execute
  string $query

有的时候希望执行自定义的sql语句或者是出于性能上的考虑要优化sql语句,则可以使用query(string $query)和execute(string $query)方法,这两个方法不同的地方在于execute方法无返回值,适用于执行脚本而不是查询结果集。

Custom Sql Calls with query()  
<?php  
class Post extends AppModel  
{  
     var $name = 'Post';  
  
     function posterFirstName()  
     {  
         $ret = $this->query("SELECT first_name FROM posters_table
                                  WHERE poster_id = 1");  
         $firstName = $ret[0]['first_name'];  
         return $firstName;  
     }  
}  
?>  


复合查询条件(使用array)
绝大多数的Model查询方法中都会通过各种方式来传递一组条件。最简单的方式莫过于使用一个SQL中的where子句,不过如果你希望获得更多的控制,你可以使用array。使用rray的好处是代码会非常的清晰和易读,并且可以比较方便的构造查询。而且这样的语法可以保证你的查询组成元素(属性,值,运算符等)被拆分为精巧可控的几部分。这可以保证Cake能够生成绝大部分非常有效率的查询语句,并且避免了SQL语法上易犯的错误。

先看看非常基础的基于array的查询:

简单查询条件array示例:
$conditions = array("Post.title" => "This is a post");

这个结构恐怕是不言自明了:该查询返回所有title为"This is a post"的Post对象。注意,只使用"title"作为查询的属性名也是可以的,但是在构造查询的时候,使用 [ModelName.FieldName]这样的写法,一者可以让你的代码更加清晰,二者可以防止命名冲突,所以请遵循这个Good Practice。那其他的检索形式如何呢?同样很简单,比如我们想检索所有title不是"This is a post"的Post对象:

array("Post.title" => "<> This is a post")

唯一增加的就是'<>'这个表达式。Cake能够解析所有的合法SQL比较运算符,包括LIKE, BETWEEN或者是正则表达式,注意,运算符和值或者表达式之间需要有一个空格。唯一不同的操作是IN操作。我们看下具体的例子:

array("Post.title" => array("First post", "Second post", "Third post"))

为conditions增加更多filter就像往array中添加一对key-value那样简单:

<?
array  
(  
     "Post.title"   => array("First post", "Second post", "Third post"),  
     "Post.created" => "> " . date('Y-m-d', strtotime("-2 weeks"))  
)  
?>

内文分页: [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]
Tags:
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]