如何覆盖Yii核心功能?

时间:2015-09-25 13:37:19

标签: php mysql yii

我是Yii的新手,实际上问题是,很多时候我遇到了像非对象错误这样的问题。

这是因为关系而发生的。也就是说,例如,我们有两个名为patient和facility的表,要在admin页面中显示数据,我们必须映射这两个表并在那里显示记录。现在,当我们删除任何一个匹配记录的设施ID时,患者表发生了非对象错误。

我不知道,yii是基于数据库关系创建的,但是yii关系的工作方式与左连接一样正常,即使与核心mysql概念相比,左连接也会得到结果的精确结果,如设施表值为null而不是值它们不匹配记录。

但是在yii的情况下,这将不会创建设施数组甚至空字段名称,这就是为什么非对象错误抛出,为了解决这些错误,我们对yii框架本身有任何解决方案吗?

否则我有一个想法来解决这个问题,必须找到在yii上构建这些连接的文件而不是空数组我们可以填充表结构(即字段名称为null或空值),然后数据将是显示为空,以便我们可以解决这些错误。

任何人都可以告诉我在哪里找到该文件以及我必须触摸代码的位置?

提前致谢

例如:

我需要这样

patient => 
        id=>1
        name=>venkat
        facilityid=> 1
        facility=> array(
                            'id'=>''
                            'facilityname'=>''
                        )

而不是

patient => 
        id=>1
        name=>venkat
        facilityid=> 1
        facility=> array(

                        )

2 个答案:

答案 0 :(得分:0)

如果该关系不存在,则为HAS ONE返回空值,为HAS MANY类型返回空数组。您应该使用它来检查关系是否存在,而不仅仅是期望它包含空的相关模型或空相关模型数组。

如果要更改核心功能的行为,则扩展任何核心类,覆盖必要的方法并使用该类。在这种情况下,我认为您可能必须处理CActiveRecord类,弄清楚它如何调用关系(可能使用__get()魔术方法)并重写它。我认为,除了检查关系是否存在之外,还有更多的工作(并且您可能还会在此过程中搞砸其他内容)。

答案 1 :(得分:0)

如果您需要此功能,为什么不在您的模型和ActiveRecord类之间放置一个类并覆盖该函数以适应您的编码风格?

无需更改核心