Cakephp 3:如何从表中获取最大数量的行

bfhwhh0e  于 2022-11-11  发布在  PHP
关注(0)|答案(3)|浏览(153)

我有表叫用户,像

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'),
  ]);
goucqfw6

goucqfw61#

最简单的方法

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

使用select而不是选项数组

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

利用蛋糕SQL函数

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

以上三种方法都给予了相同的结果
如果你想拥有一条记录,你必须在查询对象上调用->first()

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

a6b3iqyw2#

使用CakePHP 3最简单的方法:

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

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

dba5bblo

dba5bblo3#

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

//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

相关问题