Yii2 中 hasOne 方法如何添加条件? [ 2.0 版本 ]
Yii2 中的 hasOne 与 hasMany 方法非常好用,但是,在联查的过程中如果要加条件,那改怎么办呢?
你可能说,我可以直接在后面跟 where 呀,比如这样:
public function getCanWeiList(){
$tableAlias = Table::tableName();
$where['status'] = 1;
return $this->hasOne(Table::className(),['tableid'=>'id'])->where($where);
}
这样当然可以,但是如果这个条件是可变的,比如要加一个 $where['storeid'] = xx
,那你怎么搞,在 getCanWeiList()
上面加参数,但是,在控制器中,这个方法是这样调用的,
$model = new ActiveDataProvider([
'query' => Table::find()->where($where)->with('getCanWeiList')->orderBy('id desc'),
'pagination' => [
'pageSize' => 10,
],
]);
使用 with 调用的,你说怎么加条件,通过我深入进入 with 方法后发现,原来可以这样用:
Customer::find()->with([
'orders' => function ($query) {
$query->andWhere('status = 1');
},
'country',
])->all();
这样的话,条件就想怎么加,就怎么加了,上面的代码就可以改成
$model = new ActiveDataProvider([
'query' => Table::find()->where($where)->with(
[
'tableType'=>function($query){
$query->andWhere(['status'=>1,'storeid'=>$this->storeid]);
},
]
)->orderBy('id desc'),
'pagination' => [
'pageSize' => 10,
],
]);
是不是很简单!
小程府 北京
注册时间:2016-03-23
最后登录:2021-02-09
在线时长:30小时31分
最后登录:2021-02-09
在线时长:30小时31分
- 粉丝13
- 金钱255
- 威望100
- 积分1555
共 3 条评论
不错,解决了我的问题
不需要这么麻烦的,
getCanWeiList()
可以使用$model->canWeiList
获取到关联表的所有数据,如果你想加where等条件的话,可以使用$query = $model->getCanWeiList()
,这个得到的是一个ActiveQuery
,你可以继续使用$query->where(['xxx'=>'xxx'])
的恩恩,好的,改天我试一下!
hanOne
,hasMany
可以指定查询吗 , 就是这张表里面的数据很多 并不需要select *
,可以直接在后面跟->select()
吗?当然可以呀!
想通过控制器传参数显示想要的字段用with查询怎么做
@lxj 你可以
$query->andWhere('status = 1')->select(['id,'name''])
这样试试@小程府 在后边加了select字段,关联表的需要的字段查不出来是怎么回事