cakephp4 从包含按字段排序的表中获取第一条记录

问题描述

我有 cakePHP4 项目
PortfoliosPSnaps
之间存在一对多关系 我想显示所有“投资组合”以及来自 PSnaps 的一条关联记录,其中 PSnaps.status=1order=>['PSnap.order_at'=>'ASC']

我尝试了很多东西,但得到了正确的结果

下面给出了 90% 正确的结果,只有在 PSnaps.order_at 上的排序不起作用。

连同 hasmany() 我创建了 hasOne() 关联,如下面的模型所示

Model

class PortfoliosTable extends Table
{ 
   public function initialize(array $config): void
   {
    parent::initialize($config);

    $this->setTable('portfolios');
    $this->setdisplayField('id');
    $this->setPrimaryKey('id');

    $this->hasOne('FirstPSnaps',[
        'className' => 'PSnaps','foreignKey' => 'portfolio_id','strategy' => 'select',//also tried join
        //'joinType'=>'LEFT',//also tried inner,left,right
        //'sort' => ['FirstPSnaps.order_at' => 'ASC'],//*******this is not working
        'conditions' => function (\Cake\Database\Expression\QueryExpression $exp,\Cake\ORM\Query $query) {
            $query->order(['FirstPSnaps.order_at' => 'ASC']);//*******also not working
            return [];
        } 
         
    ]) 
    ; 

    $this->hasMany('PSnaps',[
        'foreignKey' => 'portfolio_id',]); 
}

Controller

$pfolios = $this->Portfolios->find('all')
        ->select(['Portfolios.id','Portfolios.client','Portfolios.country','Portfolios.url'])
        ->where(['Portfolios.status'=>1])
        ->order(['Portfolios.order_at'=>'asc','Portfolios.id'=>'asc'])
        ->limit(8)
        ->contain([
            'FirstPSnaps'=>function($q){
                return $q
                    ->select(['FirstPSnaps.portfolio_id','FirstPSnaps.snap'])
                    //->where(['FirstPSnaps.status'=>1])
                    //->order(['FirstPSnaps.order_at'=>'asc'])
                    ;
            } 
        ])
        ->toArray();  
    

它返回带有 1 个 p_snap 记录的正确 porfolios 但排序/排序不正确,因为我首先需要 p_snap 类似 where p_snap.status=1 and p_span.portfolio_id= portfolios.id limit 1 的东西。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...