gpt4 book ai didi

Yii 按另一个表 CActiveDataProvider 排序

转载 作者:行者123 更新时间:2023-12-04 03:11:10 25 4
gpt4 key购买 nike

我对此有点难过。基本上我有两个表:

页面:

  • 编号
  • 姓名

积分:

  • id-
  • 页面id
  • 积分

我想从 Page 表中获取记录,并根据它在 Points 表(点字段)中的点数对其进行排序

目前我有:

$dataProvider=new CActiveDataProvider('Page',array(
'criteria'=>array(
'condition'=>"active = 1 AND userid IN (".$ids.")",
'order'=>"???",
),

'pagination'=>array(
'pageSize'=>30,
),
));

我只是不知道如何根据相关记录的 Points 表值对其进行排序我已经为 Page/Points 表建立了一个关系,如下所示:

(在页面模型中)

'pagepoints' => array(self::HAS_ONE, 'Points', 'pageid'),

谢谢

最佳答案

你需要做两件事:

  1. pagepoints 关系添加到查询条件的with 部分
  2. 在条件的 order 部分引用您要排序的列

我在下面的代码中标记了发生这种情况的行:

$dataProvider = new CActiveDataProvider('Page', array(
'criteria'=>array(
'with' => array('pagepoints'), // #1
'condition' => 'active = 1 AND userid IN ('.$ids.')',
'order' => 'pagepoints.points', // #2
),

'pagination'=>array(
'pageSize'=>30,
),
));

要理解它是如何工作的,你需要知道的是,当 Yii 构建 SQL 查询(这是 Points 表的 LEFT OUTER JOIN)时,它使用您为 Page 模型中的关系指定的名称(您为其指定定义,它是 pagepoints)作为连接表的别名。换句话说,查询看起来像:

SELECT ... FROM Page ... LEFT OUTER JOIN `Points` `pagepoints` ...

由此可见,排序顺序的正确规范是 pagepoints.points:pagepoints 是表别名,points 是列在那张 table 上。

关于Yii 按另一个表 CActiveDataProvider 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5303963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com