【问题标题】:Phalcon model and table attribute with multiple foreign keys具有多个外键的 Phalcon 模型和表属性
【发布时间】:2014-11-21 19:16:14
【问题描述】:

正如您从这个 ERD 中看到的,我正在设计一个记录器来跟踪几种类型的用户的操作。 例如,logger.log 表中的每条记录在相关的 logger.relate.* 表中只有一个相关记录。

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

  • 日志
  • Lo​​gRelateCarrier
  • ...

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

我的问题: 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 类中保存了参与者的类型以知道我必须查询哪个关系表,而不是查询所有关系表,然后只计算其中的一条记录唯一的一张桌子)。

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

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

【问题讨论】:

    标签: model foreign-keys phalcon multiple-tables


    【解决方案1】:

    EIDT: 在终于明白了它的意思之后,答案是否定的。 您应该使用查询或坚持您的实际实现。我认为您的实际实现不会有太多开销。

    原件: 我不太确定我是否正确理解了您的问题。

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

    array(
      'alias' => 'yourAlias'
    )
    

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

    【讨论】:

    • 我知道相关的模型。我的“问题”是主模型的每个实例将只有六个相关模型之一的一个实例,具体取决于相对关系表是否具有链接到主表记录的记录。因此,我在主模型实例属性“type_actor”上使用正确相关模型的 findFirst 来处理这种情况,避免在其他相关表上运行其他 5 个 findFirst,这将 - 由于先决条件 - 产生空结果集。 Phalcon 是否有特定的方法来自动处理这种情况。
    • 仍然不确定我是否理解正确.. 让我们继续尝试:) 您可以在 log-Model 中创建一个方法,该方法在 actor_type 上实现一个开关,然后返回通过关系连接的适当模型。希望有帮助:)
    • 通过你的回答,你得到了这个场景。您解释的是我实施的实际解决方案。它实际上执行两个单独的查询:一个用于 Log 模型,另一个用于适当的相关模型。我可以通过一个使用外部连接的查询来获得相同的日期,但我想知道我是否可以让 Phalcon 在保持这样一个概念性的高水平的同时执行这样的操作:)
    • 那么你的问题的答案是否定的,我会更新我的答案:)
    猜你喜欢
    • 2012-03-16
    • 2014-08-18
    • 1970-01-01
    • 2021-11-26
    • 2020-11-15
    • 2020-11-07
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多