【问题标题】:Cakephp 3 : How to get max amout row from a tableCakephp 3:如何从表中获取最大数量行
【发布时间】:2016-06-16 04:51:20
【问题描述】:

我有表调用用户,比如

id name amount   created
1   a   100     6-16-2016
2   b   200     5-16-2016

我需要最大数量的完整行,我尝试了下面的代码但出现语法错误。

  $user = $this->Users->find('all',[
         'fields' => array('MAX(Users.amount)  AS amount'),
  ]); 

【问题讨论】:

    标签: cakephp cakephp-3.0


    【解决方案1】:

    最简单的方法

    $user = $this->Users->find('all',[
       'fields' => array('amount' => 'MAX(Users.id)'),
    ]); 
    

    使用选择而不是选项数组

    $user = $this->Users->find()
        ->select(['amount' => 'MAX(Users.id)']); 
    

    使用 cake SQL 函数

    $query = $this->Users->find();
    $user = $query
        ->select(['amount' => $query->func()->max('Users.id')]);
    

    以上三个都给出相同的结果

    如果你想拥有一条记录,你必须在查询对象上调用->first()

    $user = $user->first();
    $amount = $user->amount;
    

    【讨论】:

      【解决方案2】:

      使用 CakePHP 3 的最简单方法:

      $this->Model->find('all')->select('amount')->hydrate(false)->max('amount')
      

      将产生一个包含该表列中最大数量的数组。

      【讨论】:

        【解决方案3】:

        最好在获取结果之前禁用水合作用,以数组而不是实体的形式获取结果。下面是一个完整的示例,说明如何在数组中获取结果,其中包含不同的步骤:

        //create query
        $query = $this->Users->find('all',[
           'fields' => array('amount' => 'MAX(Users.id)'),
        ]); 
        
        $query->enableHydration(false); // Results as arrays instead of entities
        $results = $query->all(); // Get ResultSet that contains array data.
        $maxAmount = $results->toList(); // Once we have a result set we can get all the rows
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-19
          • 1970-01-01
          • 2012-08-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多