具有多个外键的Phalcon模型和表属性

时间:2014-11-21 19:16:14

标签: model foreign-keys phalcon multiple-tables

ERD example http://i57.tinypic.com/zn367d.png

从这个ERD可以看出,我正在设计一个跟踪几种用户行为的记录器。 例如,logger.log表中的每条记录在一个相关的logger.relate。*表中只有一条相关记录。

使用Phalcon Model作为独立模型,我有7个模型,一个用于主表,6个用于关系表:

  • 日志
  • LogRelateCarrier
  • ...

在Log模型类中,我使用hasMany()方法设置1-n关系;在其他模型类中,我使用了belongsTo()方法来获得n-1个关系。

我的问题: Phalcon有没有办法直接处理像这样的场景,这样我就可以通过这样的方式得到日志记录演员的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.)

让getter非常简单,比如(对不起,我对这个框架很新):

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

换句话说,我想知道在这个框架中是否有办法处理这样的场景,而不必自己编写其他选择例程。并且,只要有可能,有一些性能(因为我在logger.log类中持有actor的类型以知道我将要查询哪个关系表,而不是查询所有关系表,然后只计算一个记录来自只持有它的一个表。)

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

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

1 个答案:

答案 0 :(得分:0)

EIDT: 在最终获得意义之后,答案是否定的。 您应该使用查询或坚持实际的实现。我认为实际实施的开销太大了。

ORIGINAL: 我不太确定我是否理解你的问题。

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

array(
  'alias' => 'yourAlias'
)

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