sxtuwy 2012-09-08 16:46:28 5510次浏览 6条回复 0 0 0

两个表:表一 grade(id,title)含义是主键和年级名称 表二 classroom(id,title,grade_id)含义是主键,班级名称,所在年级 我在classroom的模型中定义了关系:'nianji' => array(self::BELONGS_TO, 'Grade', 'grade_id'), 然后在classroom的控制器使用$data=Classroom::model()->with('nianji')->findAll(); echo CJSON::encode($data);exit; 进行查询,结果是:

[{"id":"1","title":"344","grade_id":"2"},{"id":"2","title":"345","grade_id":"2"},{"id":"3","title":"346","grade_id":"2"},{"id":"4","title":"347","grade_id":"2"},{"id":"5","title":"348","grade_id":"2"},{"id":"6","title":"349","grade_id":"2"},{"id":"7","title":"350","grade_id":"2"},{"id":"8","title":"351","grade_id":"2"},{"id":"9","title":"352","grade_id":"2"},{"id":"10","title":"353","grade_id":"2"},{"id":"11","title":"354","grade_id":"2"},{"id":"12","title":"355","grade_id":"2"},{"id":"13","title":"356","grade_id":"2"},{"id":"14","title":"357","grade_id":"2"},{"id":"15","title":"358","grade_id":"2"},{"id":"16","title":"359","grade_id":"2"},{"id":"17","title":"362","grade_id":"1"}]

表grade中的数据没有获取到,怎么回事? [attach]885[/attach]

  • 回复于 2012-09-08 21:47 举报

    relation 里面的东西只有你调用的时候才会获取的吧

    例如 $classroom->trade->title

  • 回复于 2012-09-08 22:29 举报

    如果不用json,用正常的方法传递到视图的话,是和普通做法一样的。但是无法将获取的relations数据转换成json。我将这个问题反应给官方,官方不一会儿就把问题给关闭了。说是:“我们本没打算提供关联模型的json功能,用扩展吧,并给了两个扩展地址。”看来我还是国内首个关联模型数据转Json的。算是第一人吧。

  • 回复于 2012-09-09 00:29 举报

    你发个PR上去看看会不会被Accept。

    说实话CJSON::encode() 接收对象我也觉得很不合理,虽说PHP是弱类型,也不至于能把Object和Array混用。
    再退一步,即使这么用了Object也得impletement一下ArrayIterator吧。
    那话又说回来,如果这样用你还不如直接把CActiveRecord::getAttributes()直接传进去,刚好类型也相同了。

  • 回复于 2012-09-09 07:09 举报

    楼上说的没错,先把关联的对象转换成数组,再CJSON::encode()

  • 回复于 2012-09-09 09:12 举报

    我又不会什么对象转换成数组,只好用了一个扩展:carjson

  • 回复于 2012-09-09 15:11 举报

    如果是对象,必须继承自Traversable

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