繁体   English   中英

Phalcon PHP:初始化时动态设置模型源

[英]Phalcon PHP: Set model source dynamically on initialize

我有一些简单的EAV表,它们都具有相同的结构,但是具有不同的用途:

item_attribute
id | attribute_name | size_limit

item_attribute_map
id | attr_id | source_id | value

和:

transaction_attribute
id | attribute_name | size_limit

transaction_attribute_map
id | attr_id | source_id | value

用于所有密集用途的逻辑将完全相同,但是显然将引用不同的表。

因此,我决定只制作一个可以更改其源代码的模型,如下所示:

class Attribute extends \Phalcon\Mvc\Model {
    public $id;
    public $attr_id;
    public $source_id;
    public $value;

    public function getSource($param){
        return $param.'_attribute_map';
    }
}

我考虑过重写_ Construct(),传递参数,设置参数,调用parent :: _construct()并完成它; 但这似乎并不优雅。 有什么办法可以将参数传递给initialize()吗? 我应该以其他方式这样做吗? 我不打算在控制器中完成所有这些工作,因为这两个表设置了完全不同的东西,并且我想进一步使用这种数据库技术。

任何帮助将不胜感激,如果不清楚,请告诉我,我将进行编辑。

编辑:好吧,我尝试了使用__construct()的出色解决方案,并确定这是一种最终方法,现在我实际上是个主意。

编辑2:好吧,我已经找到一种方法来做我想要的(某种),这是通过在实例化模型后调用setSource()来实现的。 我不是很喜欢这个,因为它是将模型链接到表,然后立即将其链接到另一个表。

编辑3:我遇到过建立一个基类的想法,该基类将接受三个独立模型的创建请求,但在那种情况下,实际上只会创建一个模型,并相应地处理方法请求。 这绝对是比上一个更好的解决方案,但是我不喜欢针对特定情况制定全局规则,而是希望在那些情况的范围内针对特定案例制定特定规则。 我现在将使用此方法,但我会保留此问题,以希望有人有更好的主意。

如果要在某些模型上使用相同的方法,只需创建基本模型并在模型中扩展它,而不是扩展\\ Phalcon \\ Mvc \\ Model

class BaseModel extends \Phalcon\Mvc\Model {
  // functions what you need in several other models
}

class Attribute extends BaseModel  {
  // functions what you need in several other models
}

class Attribute extends BaseModel  {
  // functions what you need in several other models
}

我不知道您是否尝试过此选项? 也许您做了类似的事情? 您应该在问题中添加更多代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM