0

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

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

因此,除了在我的数据透视表中只有两个 belongs_to 字段之外,我还想存储计数。

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

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

4

2 回答 2

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

于 2012-12-08T16:06:44.933 回答
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;
于 2012-12-15T07:28:21.910 回答