Kohana ORM商店以多对多的关系计算

时间:2012-11-15 21:05:26

标签: kohana-orm kohana-3.2

我正在使用Kohana 3.2和Kohana ORM构建应用程序。

该应用程序具有系统。系统包含组件。系统可以包含多个组件,但也可以包含相同类型的多个组件。例如。 System_A可能有10个Component_Y和3个Component_Z

因此,我不想在我的数据透视表中只有两个belongs_to字段,而是还要存储计数。

如果我只是使用has-many-through,我将无法访问计数。如果没有ORM,我只是将计数加入到SQL中的组件中,因为计数对于System + Component组合是唯一的,因此当我在某个系统的上下文中访问该对象时,我可以访问该组件的计数。

在Kohana ORM中如何最好地解决这个问题?

2 个答案:

答案 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;