2015-09-25 158 views
2

我是Yii的新手,其实问题在于,我很多时候都面临像非对象错误这样的问题。如何覆盖Yii核心功能?

这是由于关系而发生的。即例如,我们有两张名为patient and facility的表格,为了在管理页面中显示数据,我们必须映射这两个表格并在那里显示记录。现在,当我们删除任何一个匹配病历表的非对象错误匹配记录的设施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

你有没有在这简单的检查,如果该值是一个空数组一些逻辑视为扔?例如:'if(empty($ patient-> facility)){// do something}'?你不应该修改Yii的核心。 – visevo

+0

是的,我们可以这样做,但最好的框架之一没有在yii本身的解决方案?或者它可能是我认为的错误,这在开发人员的角度来说有些困难。 – venkat

+0

如果我们必须在一个地方改变它,它会被治愈,而不是检查每个文件,如果没问题,让我知道解决方案。 – venkat

回答

0

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

如果您想更改核心功能的行为,请扩展任何核心类,重写必要的方法并改为使用该类。在这种情况下,我认为你可能不得不在CActiveRecord类上工作,找出它如何调用关系(可能使用__get()魔术方法)并重写它。我认为,这不仅仅是检查关系是否存在,而是更多的工作(在这个过程中,你也可能会把其他东西搞砸)。

0

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

无需改变核心