【问题标题】:CakePHP: How do I order results based on a 2-level deep association model?CakePHP:如何根据 2 级深度关联模型对结果进行排序?
【发布时间】:2010-04-02 20:46:19
【问题描述】:

我希望我不需要求助于自定义查询。

一个相关的问题是:我如何检索数据,以便如果关联模型为空,则根本不检索任何记录,而不是关联模型的空数组?

作为一个过于简单的例子,假设我有以下模型: 城市 --> 街道 --> 房子

如何按门牌号对城市结果进行排序?

我如何检索至少包含一所房子的城市结构?我不想要包含城市名称和详细信息以及空 House 数组的记录,因为它会混淆分页结果。

CakePHP 在单独的查询中检索属于 Street 的 House 记录,因此将“House.number DESC”之类的内容放入搜索查询的“订单”字段会返回“字段不存在”错误。

有什么想法吗?

【问题讨论】:

  • 您能否提供一个简短的用例来更好地解释您希望您的页面如何工作?

标签: cakephp


【解决方案1】:

在您的控制器中进行实际查询操作之前,请在模型中设置 order 子句。

$this->City->Street->hasMany['House']['order'] => "houseNo DESC";

【讨论】:

  • 什么是街也有'订单'条件?哪个优先,可以控制吗?
  • 您可以连接条件。未测试: $this->Model->hasMany['OtherModel']['order'] => "field DESC" 。 $this->Model->hasMany['OtherModel']['order'];
【解决方案2】:

对于您的第一个问题,我认为您可以通过在模型关联中指定顺序来对结果进行排序。

例如,来自街道模型:

var $hasMany = array('House'=>array('order'=>'address desc'))

如果没有自定义查询,很难获得至少有一所房子的城市,所以你最好走这条路,而不是花这么多时间试图让它在蛋糕上工作。

【讨论】:

  • 谢谢。我通过使用内部联接避免了自定义查询,该内部联接在 cake 继续获取相关模型之前过滤掉了不需要的结果。
  • 谢谢。以为在执行查询后我将不得不手动对相关结果进行排序。干杯
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-29
  • 1970-01-01
  • 2013-09-28
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
相关资源
最近更新 更多