【问题标题】:How to retrieve data from model using findByType in cakephp?如何在 cakephp 中使用 findByType 从模型中检索数据?
【发布时间】:2017-08-11 12:10:08
【问题描述】:

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

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

在 SQL Dump 中,页面重新加载时完成以下查询:

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

【问题讨论】:

  • 你使用的是什么版本的 CakePHP?
  • @drmonkeyninja 我正在使用 CakePHP v2.10.0-RC1
  • 好的,谢谢。我已经添加了适合您的 CakePHP 版本的答案。 Ajay 的答案是针对 CakePHP 3。以后发布问题时,请务必提及您使用的版本,因为它可以帮助人们给您正确的答案。

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


【解决方案1】:

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

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

findByType 是一种特殊的 find 方法,它只会返回与作为 find 方法的参数传递的 type 匹配的第一条记录,这就是它没有返回您想要的内容的原因。您可以在official docs 中阅读有关findBy 魔术函数的更多信息。

【讨论】:

    【解决方案2】:

    试试这个:

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

    【讨论】:

      【解决方案3】:

      我认为你不能使用 findBy 限制。如果你想使用limit,你必须使用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 文档的findBy

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

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-29
        • 2012-09-15
        • 1970-01-01
        • 2017-12-20
        相关资源
        最近更新 更多