如何使用cakephp中的findByType从模型中检索数据?

时间:2017-08-10 07:06:56

标签: cakephp model-view-controller cakephp-2.x

我正在尝试使用以下代码行从 CallForwardingCondition 模型中查找记录:

$this->loadModel('CallForwardingCondition');
$this->set('callForwardingCondition', $this->CallForwardingCondition->findByType('list'));

在SQL转储中,在重新加载页面后完成查询:

SELECT `CallForwardingCondition`.`type`, `CallForwardingCondition`.`description` FROM `vpbx`.`call_forwarding_condition` AS `CallForwardingCondition` WHERE `CallForwardingCondition`.`type` = 'list' LIMIT 1

如何将Cakephp指向findByType,这将导致后续查询?

SELECT `CallForwardingCondition`.`type`, `CallForwardingCondition`.`description` FROM `vpbx`.`call_forwarding_condition` AS `CallForwardingCondition` WHERE `CallForwardingCondition`.`type` LIKE '%' LIMIT 10

3 个答案:

答案 0 :(得分:1)

对于CakePHP 2.x,您需要使用find('all')并将其传递给所需的条件limit: -

$result = $this->CallForwardingCondition->find('all',[
    'conditions' => ['CallForwardingCondition.type Like' => '%'],
    'limit' => 10
);

findByType是一种特殊的搜索方法,它只会返回与作为查找方法参数传递的type匹配的第一条记录,这就是为什么它不会返回您想要的内容。您可以在official docs中了解有关findBy魔术功能的更多信息。

答案 1 :(得分:0)

试试这个:

 $result = $this-> CallForwardingCondition ->find('all',['limit'=>10,'conditions'=>['CallForwardingCondition.type Like'=>'%'])->toArray();

答案 2 :(得分:0)

我认为您无法使用findBy限制。如果要使用限制,则必须使用findAllBy<fieldName>。即使findAllBy<fieldName>,您也无法使用LIKE

这是来自cakephp的findAllBy

findAllBy<fieldName>(string $value, array $fields, array $order, int $limit, int $page, int $recursive)

因此,如果你想要隐瞒它,你必须采取以下方式;

 $this->CallForwardingCondition->findAllByType('something',['CallForwardingCondition.*'],['CallForwardingCondition.id'=>'desc'],'10');

这是来自cakephp doc的findBy

findBy<fieldName>(string $value[, mixed $fields[, mixed $order]]); 

希望对你有所帮助。