问题描述
我有 cakePHP4 项目Portfolios
和 PSnaps
之间存在一对多关系
我想显示所有“投资组合”以及来自 PSnaps
的一条关联记录,其中 PSnaps.status=1
和 order=>['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 (将#修改为@)