|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
可以在书上很方便地做标记,及时记下自己的心得体会。 </p> 有关数据检索的更多内容
咱们已晓得利用模子内置办法find()对数据库表停止数据检索的根基办法。find()办法切实其实十分壮大,并且咱们可使用它来完成庞杂的查询。咱们将会进修更多有关find()办法的内容,懂得若何经由过程它来履行庞杂的查询。咱们也将进修若何利用CakePHP供应的其他数据检索技能。
有关find()办法的更多内容
find() 办法十分天真,它可以完成SQL言语中SELECT查询语句所能完成的一切了局。好比,咱们只检索书名以字母“A"开首并依照ISBN书号降序分列的前两本书的书号字段和作者名字字段,咱们曾需求写出上面这个SQL查询语句:
SELECT `Book`.`isbn`, `Book`.`title`, `Book`.`author_name`
FROM `books` AS `Book`
WHERE `Book`.`title` LIKE 'A%'
ORDER BY `Book`.`isbn` DESC
LIMIT 2;
在CakePHP中,咱们可以经由过程像上面如许利用find()办法来失掉一样的了局。
find(
'all',
array(
'conditions' => array('Book.title' => 'LIKE A%'),
'fields' => array(
'Book.isbn',
'Book.title',
'Book.author_name'
),
'order' => 'Book.isbn DESC',
'limit'=>2
)
);
[ 在前提(condition)中,为字段添加上模子称号前缀(像写成Book.title而非title)是一个很好的习气。当咱们需求调取相干模子中的数据而且了局中有不异的字段称号时,这个习气就特别主要。别的它也改良了代码的清爽度
] find()办法承受两个参数:$type(类型)和$constraints(束缚)。$type(类型)是一个用来界说查询“类型”的字符串。$type可以设成上面这三品种型中的一个
- all:find办法会依照给定的排序体例和个数限制前往一切合适前提的纪录。
- first:这个办法只前往合适束缚前提的首笔记录
- count:会前往查询了局中所包括纪录的总数目。
正如咱们从上一个例子中所看到那样,咱们可以以联系关系数组(associative array)的模式在第二个参数 $constraints中指定其他查询束缚。$constraints参数的联系关系数组可以有以下键(key)
- conditions(前提):前提(conditions)可使用于代替查询语句中的WHERE子句。默许值是1=1,这暗示没前提束缚。
- fields(字段):查询了局应当前往的字段局限。假如没有指明,它会前往一切字段。当find()函数的第一个参数$type被设置成count时,该参数不成用。
- order(排序):这个字符串界说了查询语句中ORDER BY子句的内容。假如order排序没有指明,那末SQL查询中将不会添加有ORDER BY子句。查询类型是count是,该参数也不成用。
- limit(限制):该整数指了然前往纪录的最大数目。假如没指定limit,那末函数会前往一切合适前提的纪录。只要当查询类型是all时,它才可用。
- offset(偏移值):这个参数界说了首个前往纪录的偏移值。默许值是0.只要当type参数是all时,该设置才无效。
为了便于读者更清晰地懂得这个概念,咱们将会疾速阅读上面这些标明了find()用法的例子:
1,假如你想晓得书名以字母“A”开首的书的数量,咱们会在BooksController(Books掌握器中)添加以下代码:
$count = $this->Book->find('count', array('conditions' =>
array('Book.title' => 'LIKE A%'));
It executes the following SQL query:
它会履行以下SQL查询
SELECT COUNT(*) AS `count` FROM `books` AS `Book` WHERE
`Book`.`title` LIKE 'A%';
当find()办法的$type参数设置成count时,查询前往的了局是一个整数。在这个例子中, $count变量的值多是2.
2,假如咱们想查询id最大书本所对应的书号(ISBN)和书名,咱们会利用上面这个代码
$book = $this->Book->find('first',
array(
'fields' => array('isbn', 'title'),
'order' => 'Book.id DESC'
)
);
该代码会履行以下SQL语句
SELECT `Book`.`isbn`, `Book`.`title` FROM `books` AS `Book`
WHERE 1 = 1 ORDER BY `Book`.`created` DESC LIMIT 1;
贮存在$book变量中的了局会是上面这个模样:
Array
(
[Book] => Array
(
[isbn] => 1847192971
[title] => Building Powerful and Robust Websites
with Drupal 6
)
)
3,假如你想找出某个作者所写的所得书并依照书名来排序,那末上面这个代码可以到达此目标:
$books = $this->Book->find('all',
array(
'fields' => array('title'),
'conditions' => array(
'Book.author_name' => 'LIKE David Barnes'
),
'order' => 'Book.title ASC'
)
);
下面这段代码将会履行上面这个SQL查询
SELECT `Book`.`title` FROM `books` AS `Book` WHERE `Book`.`author_
name` LIKE 'David Barnes' ORDER BY
`Book`.`title` ASC
下面这段查询会前往以下的了局:
Array
(
[0] => Array
(
[Book] => Array
(
[title] => How to write computer books
)
)
[1] => Array
(
[Book] => Array
(
[title] => How not to write a technical book!
[ 请注重,find()办法的$type参数分离被设置成 first和all时,前往的了局会有所区分。当它被设置成first时,前往的数组是一个联系关系数组,个中包括有书的信息。当类型参数被设置成all时, 前往的是一个联系关系数组的数组,每一个联系关系数组内包括有一本书的相干信息
] 在下面这些例子中,咱们进修了find()办法中利用的一些十分复杂的前提限制。在实践的使用法式中,查询所用的前提要庞杂的多,能够会带有很多嵌套前提和各类类型的逻辑和前提运算符。咱们接上去将会存眷$constraints参数中的condition键,并进修若何利用find()来完成一些庞杂的工作。
会有很多高手的鼓励,新手的支持,慢慢你劲头就十足,有更多的信心和兴趣去学。 |
|