【问题标题】:Best approach handling Relational ActiveRecords in Yii在 Yii 中处理关系 ActiveRecords 的最佳方法
【发布时间】:2013-09-13 13:37:32
【问题描述】:

我对使用 ActiveRecords 从我的数据库中“获取”数据的不同方式感到很困惑。对于这个特定问题,我不知道是否应该使用 model->findAll()、criteria(这将允许使用分页)或必要时使用普通 SQL(假设我需要在 GridView 中显示输出)。

我在这里要做的是列出我的“公司”表中的所有公司,以及他们每个人支付了多少钱。付款记录在“交易”表中,该表的“价值”字段表示金额。

所以,如果我必须使用 SQL 查询,它会是这样的:

SELECT * 
FROM company 
LEFT OUTER JOIN transaction 
    ON company.id = transaction.company 
GROUP BY value

简而言之,实现这一目标的最简单方法是什么? 谢谢。

【问题讨论】:

  • 始终建议使用 activerecord 方法查询数据
  • 抱歉这个令人困惑的问题,我忘了说我没有用任何方法来实现这一点,所以关于如何使用 ActiveRecord 来解决这个特定问题的一些说明会非常有用
  • 你定义了两个模型之间的关系吗?
  • 是的,对于公司:'transaction' => array(self::HAS_MANY, 'Transaction', 'company'),对于交易:'company' => array(self::BELONGS_TO, '公司', 'id'),
  • 您能解释一下,您尝试过哪些解决方案?您的问题几乎是人们能想到的最简单的关系查询。您不清楚manual 的哪一部分?

标签: php sql activerecord yii


【解决方案1】:

数据提供者的代码

$dataProvider=new CActiveDataProvider('Company', array(
    'criteria'=>array(
        'with'=>array('transaction'),
        'group' = 't.value'
    ),
    'pagination'=>array(
        'pageSize'=>20,
    ),
));

【讨论】:

  • 这个答案是错误的。如果您已经定义了relations,则无需添加任何额外条件。只需一个简单的'with'=>'transaction' 即可。
  • 由于某种原因它现在无法工作...由于某种原因它没有加入:SQL:SQLSTATE [42S22]:找不到列:1054 'group statement 中的未知列't.value' '。执行的 SQL 语句为:SELECT t.id AS t0_c0, t.description AS t0_c1, t.sector AS t0_c2, t3.@98765433@3. AS t 987654336 countries AS t0_c4t 987654340 @ $ 987654341 @,t 987654343 company 987654346 t 987654346 @ group by t .value LIMIT 20
猜你喜欢
  • 1970-01-01
  • 2020-09-25
  • 2021-09-10
  • 2017-05-23
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多