我正在使用Kohana 3.2和Kohana ORM构建应用程序。
该应用程序具有系统。系统包含组件。系统可以包含多个组件,但也可以包含相同类型的多个组件。例如。 System_A可能有10个Component_Y和3个Component_Z
因此,我不想在我的数据透视表中只有两个belongs_to字段,而是还要存储计数。
如果我只是使用has-many-through,我将无法访问计数。如果没有ORM,我只是将计数加入到SQL中的组件中,因为计数对于System + Component组合是唯一的,因此当我在某个系统的上下文中访问该对象时,我可以访问该组件的计数。
在Kohana ORM中如何最好地解决这个问题?
答案 0 :(得分:0)
我用这种方式解决了这个问题:
protected $_has_many = array(
'omvormer' => array(
'model' => 'omvormer',
'through' => 'systeemomvormer'
),
'systeemomvormer' => array(
'model' => 'systeemomvormer',
)
);
我已将数据透视表systeemomvormer
分别添加到systeem
。
我现在可以这样做:
$so = ORM::factory("systeemomvormer");
$so->where('systeem_id', '=', $systeem_id);
$so->where('omvormer_id', '=', $omvormer_id);
$result = $so->find();
$result->aantal = $omvormer_count;
但它仍然只是部分解决方案,因为我无法update()
结果。 Kohana说结果没有加载。然而,这超出了这个问题的范围,我将为此提出一个新问题。
这也有帮助: http://forum.kohanaframework.org/discussion/7247/kohana-3-orm-save-for-update-a-many-to-many/p1
答案 1 :(得分:0)
要在联结表中存储的数据多于两个键,您需要为它创建一个模型。
所以,
system _has_many system_component
component _has_many system_component
system_component _belongs_to component
system_component _belongs_to system
但是,如果您这样做,则可能不需要存储计数。相反,您可以执行以下操作:
$system->components->count_all();
然后,访问它们:
foreach($system->components->find_all() as $component)
echo $component->component->name;