yii2 连表查询列的选择问题 [ 新手入门 ]
在Order数据模型中,定义了与user表的关系
......
public function getUser(){
return $this->hasOne(User::className(),['userid'=>'userid']);
查询查询订单表与user表的username字段的时候使用了下面的语句
$Order= Order::find()
->joinWith('user')
->select(['Order.name','user.username'])
->asArray()
->all();
var_dump( $Order);
输出结果是把整个user表的信息都打印了出来。真是坑爹啊,这些信息足以泄露整个重要的user表的登录信息
反复查看 vendor\yiisoft\yii2\db\ActiveQuery.php文件的joinWith方法定义,发现一句
@param boolean|array $eagerLoading whether to eager load the relations specified in $with
.
* When this is a boolean, it applies to all relations specified in `$with`. Use an array
* to explicitly list which relations in `$with` need to be eagerly loaded. Defaults to `true`.
原来 joinWith('user')默认的是user表的全部字段,如果 $eagerLoading输入一个数组,就只显示数组中的字段 于是语句改为:
$Order= Order::find()
->joinWith('user',['username'])
->select(['Order.name','user.username'])
->asArray()
->all();
var_dump( $Order);
查看结果,输出就只有两个字段了,特写出来,希望对遇上同类问题的朋友有所帮助
共 0 条回复
没有找到数据。
李东涛
注册时间:2017-03-26
最后登录:2019-10-24
在线时长:6小时13分
最后登录:2019-10-24
在线时长:6小时13分
- 粉丝0
- 金钱85
- 威望0
- 积分145