Yii Framework Forum: 三表关联如果改用Ar怎面建Relation和引用同名字段? - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

三表关联如果改用Ar怎面建Relation和引用同名字段? Rate Topic: -----

#1 User is offline   javad78 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 11
  • Joined: 03-December 10

Posted 21 March 2013 - 08:20 AM

首先在 control里用sql查询结果生成ArrayProvider :

//sql语句中使用 A.x, B.x, C.x 分别引用 A、B、C 三表中的同名字段x

$sql ='SELECT A.x, B.x, C.x
FROM A a
LEFT JOIN B b ON a.id = b.id
LEFT JOIN C c ON a.id = c.id'

$array_data = Yii::app()->db->createCommand($sql)->queryall();

$ArrayProvider = new CArrayDataProvider($array_data, array('keyField'=>'x',) //指定字段x作为主键

然后在 view 里使用CGridView 展示:

$this->widget('zii.widgets.grid.CGridView',array(
'dataProvider'=>$ArrayProvider,
'columns'=>array(
array( 'name'=>'A.x',
'value'=>'$data["x"]',
),
array( 'name'=>'B.x',
'value'=>'$data["x"]', <--问题是,此句应该怎么写才能引用到B.x ?
),
array( 'name'=>'C.x',
'value'=>'$data["x"]', <--同上,此句应该怎么写才能引用到C.x
),

),
));
0

#2 User is offline   yiqing95 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 593
  • Joined: 27-December 10
  • Location:china

Posted 21 March 2013 - 11:35 AM

sql 可以起别名的:

SELECT A.x AS a_x , B.x as b_x , C.x as c_x
FROM A a
LEFT JOIN B b ON a.id = b.id
LEFT JOIN C c ON a.id = c.id


然后引用 你最好在查一个主键id出来 ArrayDataProvider 可能要指定一个keyField

你或许应该直接用CSqlDataProvider 不用先findAll 再导到 “数组数据提供者类”里面; findAll 大数据时费内存的 直接用CSqlDataProvider就好因为有分页支持(内部自然是sql语句的limit子句了)所以一次导入内存的数据不会太多并且还有分页支持(小数据量时也可以直接禁用掉分页--这个功能子句查api文档) :D
good luck!
0

#3 User is offline   javad78 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 11
  • Joined: 03-December 10

Posted 23 March 2013 - 11:05 PM

已经用“自定义主键 + 别名”搞定了,多谢!

不过接着还有新的想法,如果想用Yii 自带 AR实现从“A join B join C ”这种跨表关联Yii能否处理?(个人感觉 AR 中的 BELONGS_TO 等四种关系只是在 A,B 两表之间创建 relation )

接着上面的例子,

如果想用 AR 从 A表关联到 B表再关联到 C表,并同时需要引用到A,B,C表中的同名字段x,relation 应该怎么写呢?同名字段又该如何引用呢?
0

#4 User is offline   javad78 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 11
  • Joined: 03-December 10

Posted 13 April 2013 - 08:22 AM

View Postjavad78, on 23 March 2013 - 11:05 PM, said:

已经用“自定义主键 + 别名”搞定了,多谢!

不过接着还有新的想法,如果想用Yii 自带 AR实现从“A join B join C ”这种跨表关联Yii能否处理?(个人感觉 AR 中的 BELONGS_TO 等四种关系只是在 A,B 两表之间创建 relation )

接着上面的例子,

如果想用 AR 从 A表关联到 B表再关联到 C表,并同时需要引用到A,B,C表中的同名字段x,relation 应该怎么写呢?同名字段又该如何引用呢?


后面的问题没人能帮忙解答一下么?
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users