zcyxm 2012-11-23 14:00:39 7074次浏览 8条回复 0 0 0

我在model里面额外定义了两个属性

public $province ;
public $city ;

这两个属性是用来接收表单的信息的,传过来的值都是int,数据库里面的字段是location,我在存入处理一下,给location的值是$province加上逗号加上$city的值。 然后我设置了get和set。存入数据的时候没问题。更新的时候,就得不到$province和$city 的值了。我以为是我的get写得有问题。于是我做了一个测试,发现依然不行。 测试是这样的:

我数据库有两个字段,province和city,存入的都是文字,当读取某一条数据的时候,我需要在view里面这样显示 <?php echo $user->province . ' ' . $user->city ?>。 然后我在这个表的model里面定义了location,我设置get方法是

public function getLocation()
{
    if ($this->province && $this->city) {
        return $this->province . ' ' . $this->city;
    }
    return 'Unknown';
}

然后我在view里面使用$user->location,竟然没有值。

这个是为啥?

是我的思路有问题,方法不正确,还是我的set和get方法写错了?

求大大们帮帮忙啊。

  • 回复于 2012-11-23 20:11 举报

    继承自CFormModel还是CActiveRecord?如果有增删查改,就得用CActiveRecord。

  • 回复于 2012-11-23 20:19 举报

    继承的这个CActiveRecord。

    查了很多资料,都不能解决。刚刚我貌似解决了,正在测试中,但是觉得很不可思议。

    定义属性的时候貌似需要$_city 和$_province , 不能定义成$city 和$province

  • 回复于 2012-11-23 20:21 举报
    public $_province ;
    public $_city ;	
    

    定义成这样,(没有尝试定义成private)然后添加到rules里面,我用的是province和city。虽然定义的时候我加了_,但是不知道为什么可以。

    然后定义set和get方法。

    经过测试,表单里面可以用province和city收集信息,然后合并处理成一个location,更新的时候,在get方法里面把location处理成当时从表单输入的值。

  • 回复于 2012-11-23 20:29 举报

    整个事情是这样的,用了舰长给的省市二级联动,但是数据库里面只有一个字段location,我提议说修改数据库,老板说,这样做很山寨,说人都是只存一个市,就是到是哪个省的,还让我看kissy。我懒得看,就想了这个办法解决。

    class ProductApplier extends CActiveRecord{}
    里面定义两个属性 public $province ;public $city ;,省、市收集表单,在save的时候处理一下,加个逗号存入数据库。save的时候完全没问题。但是更新的时候,就获得不了值了。刚开始怀疑是我自己的get方法有错误。后来发现根本不是这么回事。

    但是后来把属性改成 public $_province ;public $_city ;其他的都没变,竟然可以。

    很奇怪。不解。。。

  • 回复于 2012-11-23 20:51 举报

    其实不用写到模型属性里,可以直接从$_POST把省市的变量赋值给localhost。

  • 回复于 2012-11-25 10:05 举报

    你没写验证规则

  • 回复于 2012-11-26 09:44 举报

    和验证规则没关系的吧?

    需求是这样的,

    省和市的属性不在表内,表内只有一个location字段,内容是需要存省和市的值(至于怎么处理,你自己决定),需要insert和update

    那你说该怎么做?

  • 回复于 2012-12-20 11:27 举报

    你提交的时候有没有给他们赋值啊!!!

您需要登录后才可以回复。登录 | 立即注册