【发布时间】:2014-10-23 20:54:33
【问题描述】:
我对 Containable 行为有疑问。
我想知道是否有任何方法可以访问包含的模型属性以进行排序等操作。
例如,我有一个模型 B,它属于模型 A。我需要使用 A 的属性(整数)对 B 的对象进行排序。它将类似于:
'contain' => array(
'A' => array(
'B' => array(
'order' => 'A.integer_attribute'
)
)
)
我知道在没有 Containable 的情况下有更简单的方法可以做到这一点,但由于这里不值得详述的原因,我需要使用它。这是一个抽象的例子,实际上模型 A 属于其他模型,这只是深度可包含树的一小部分。
如果有任何帮助,我将非常高兴!
编辑
好的,我会尽量不说不清楚的描述一下情况:
我有4个模型:User、Category、Field和UserField,它们的关系如下:
Category hasMany User
Category hasMany Field
User hasMany UserField
Field hasMany UserField
这些关系的对立面都是belongsTo。这里的目的是用户属于一个类别,该类别有许多字段需要填写他的信息(城市、州等)。他填写的信息存储在 UserField 表中,因为每个信息都需要有它的字段和提供它的用户。
也就是说,我需要构建一个屏幕,为每个类别显示一个用户列表及其信息。因此,我检索所有类别及其字段,以便为每个类别构建一个表。每个字段都有一个属性“no_order”,即表示字段出现顺序的数字。
同时,我需要每个类别的所有用户在表格中正确显示它们。最后,还有一个问题,我需要为每个用户让 UserField 对象按各自字段的“no_order”排序。所以我最终得到了类似的东西:
$categories = $this->Category->find('all', array(
'order' => 'Category.name',
'contain' => array(
'Field',
'User' => array(
'UserField' => array(
'order' => 'Field.no_order'
)
)
)
));
但这不起作用,因为 UserField 无法从那里到达其各自 Field 的 no_order。
如果本文不够清楚,我深表歉意,但对于愿意花一点时间阅读本文的人,我将非常感谢您的帮助!
【问题讨论】:
-
您需要共享示例数据以及您希望如何对其进行排序。您所描述的内容没有多大意义,因为任何单个 A 的所有 B 都将排序相同。也许您想将
order移动到外部数组(即 'A' => 数组级别) -
好的,我会编辑并尝试更具体地提供风景
标签: php cakephp containable