2014-11-21 72 views
1

ERD example http://i57.tinypic.com/zn367d.png尔康模型,并与多个外键

你可以从这个ERD见表属性,我设计的是跟踪多个类型的用户的行为的记录器。 在实例中,logger.log表中的每条记录在相关的logger.relate。*表之一中只有一条相关记录。

使用尔康模型作为一个独立的,我有7个型号,一个是主表和6的关系表:

  • 登录
  • LogRelateCarrier
  • ...

在Log模型类中,我使用hasMany()方法设置1-n关系;在其他模型类中,我使用用于n-1关系的belongsTo()方法。

我的问题: 是那里尔康直接处理的情况类似这样的方式,让我能够得到的日志记录演员的ID只是做类似:

$log  = Log::findFirst(1); 
$id_actor = $log->getIdActor(); // Getter method for actor's ID 
$actor_type = $log->getActorType(); // Getter method for actor's type (customer, carrier, etc.) 

有在干将很简单,像(原谅我,我真的很新的这个框架):

public function getIdActor() { 
    return $this->id_actor; 
} 

换句话说,我想知道是否有在这个框架的方式来处理这种情况下不必须编写自己的其他选择例程。并且,只要有可能,就会有一些性能(因为我在logger.log类中保存了actor的类型以知道哪个关系表需要查询,而不是查询所有关系表,然后只计算一条记录一个唯一的表格)。

最后,我确实使用了很多关系表,因为我需要数据层(而不是逻辑之一)来执行日志表和许多不同参与者外部表之间的约束。

希望我解释一下情况,非常感谢!

回答

0

EIDT: 终于明白了什么意思,答案是否定的。 您应该使用查询或坚持您的实际实施。我不认为你的实际执行开销太多。

原文: 我不太确定我是否正确理解你的问题。

你想从模型中选择一个相关的模型? 如果是这样,您可以使用belongsTo和hasMany创建别名。这两种方法的最后一个参数是一个数组:

array(
    'alias' => 'yourAlias' 
) 

现在你可以使用$log->yourAlias->getIdActor();

+0

我知道相关的模型。我的“问题”是,根据相关关系表有或没有链接到主表记录的记录,主模型的每个实例只有六个相关模型中的一个的一个实例。 因此,我通过在主模型实例属性“type_actor”上找到第一个正确的相关模型来处理情况,从而避免在其他相关表上运行其他5个findFirst,由于前提条件,将生成空结果集。 Phalcon是否有自动处理这种情况的特定方法。 – user3418803 2014-11-23 18:03:22

+0

仍然不知道我的理解是否正确..让我们继续尝试:) 您可以在log-Model中创建一个方法,在actor_type上实现开关,然后返回通过关系连接的适当模型。 希望可以帮助:) – Celoain 2014-11-23 19:05:41

+0

通过你的回答,你得到了这个场景。你解释的是我实施的实际解决方案。它实际上执行两个单独的查询:一个用于Log模型,另一个用于适当的相关模型。我可以通过一个外部连接使用查询获得同一日期,但想知道是否可以让Phalcon在这样的概念高层次上执行这样的操作:) – user3418803 2014-11-23 20:33:23