Orm cakephp4从包含表中按字段顺序获取第一条记录
我有cakephp4项目Orm cakephp4从包含表中按字段顺序获取第一条记录,orm,relationship,cakephp-4.x,Orm,Relationship,Cakephp 4.x,我有cakephp4项目 在投资组合和psnap之间有一对多的关系 我想显示所有“公文包”,其中包含一条来自PSnaps的相关记录,其中其PSnaps.status=1和order=>['PSnap.order\u at'=>'ASC'] 我做了很多尝试,但都得到了正确的结果 下面给出了90%的正确结果,仅在PSnaps上订购。在上订购不起作用 除了hasmany()之外,我还创建了hasOne()关联,如下面的模型所示 型号 class PortfoliosTable extends Tabl
在
投资组合
和psnap
之间有一对多的关系 我想显示所有“公文包”,其中包含一条来自
PSnaps
的相关记录,其中其PSnaps.status=1
和order=>['PSnap.order\u at'=>'ASC']
我做了很多尝试,但都得到了正确的结果
下面给出了90%的正确结果,仅在PSnaps上订购。在上订购不起作用
除了hasmany()
之外,我还创建了hasOne()
关联,如下面的模型所示
型号
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',
]);
}
控制器
$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记录的正确文件夹,但排序/排序不正确,因为我需要第一个p_snap,例如p_snap.status=1和p_span.portfolio_id=portfolios.id limit 1
您最好在模型中编写一个专用查询,然后只回显每个返回对象中的第一项。检查中的queryBuilder
功能。我尝试了queryBuilder(),得到了更多的错误您需要更多的技巧才能正常工作,只需对所有记录进行排序和加载,然后在PHP级别上依赖正确的记录,并不是过度建议,请参见。另外-无耻的提前插电-检查,它还不稳定,但你可能会发现它很有用,想试试。