2017-08-10 121 views
0

我试图找到使用的代码下面一行从CallForwardingCondition模型记录:如何使用cakephp中的findByType从模型中检索数据?

$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会导致以下查询?

​​
+0

您使用的是什么版本的CakePHP? – drmonkeyninja

+0

@drmonkeyninja我正在使用CakePHP v2.10.0-RC1 –

+0

好的,谢谢。我添加了一个适合您的CakePHP版本的答案。 Ajay的答案适用于CakePHP 3.请务必在将来发布问题时提及您使用的版本,因为它可以帮助人们给出正确的答案。 – drmonkeyninja

回答

0

试试这个:

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

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

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

findByType是一种特殊的查找方法那只会返回匹配type的第一条记录,作为find方法的参数传递,这就是为什么它没有返回你想。您可以在official docs中阅读关于findBy魔术功能的更多信息。

0

我不认为你不能使用findBy有限制。如果你想使用限制,你必须使用findAllBy<fieldName>。即使是findAllBy<fieldName>,也不能使用LIKE

这是CakePHP的

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

所以,如果你想隐蔽它,你必须执行以下操作方式findAllBy;

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

这是012phfrom cakephp doc。

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

希望对你有帮助。

相关问题