Php Yii2在搜索模型中组合多个模型
Yii2.0.15和搜索模型 首先,我不想使用活动记录,实际上我用Php Yii2在搜索模型中组合多个模型,php,search,yii,yii2,Php,Search,Yii,Yii2,Yii2.0.15和搜索模型 首先,我不想使用活动记录,实际上我用newquery() 我正在使用一个商店系统,它的用户有不同的角色(财务经理、代表、访客、商店等…),并将所有的个人资料保存在一个类似于user的表格中。(我还使用RBAC系统作为角色)。 我有一个网格视图,有5列:用户作业,商店名称,品牌,代表编号和城市省份 用户作业:用户角色 门店名称:具有门店角色的用户的门店名称 品牌:品牌产品 代表编号:代表具有代表角色的用户 省市:省市代表或门店名称 如您所见,这里是gridview中的
newquery()
我正在使用一个商店系统,它的用户有不同的角色(
财务经理、代表、访客、商店等…
),并将所有的个人资料保存在一个类似于user的表格中。(我还使用RBAC系统作为角色)。我有一个
网格视图
,有5列:用户作业
,商店名称
,品牌
,代表编号
和城市省份
用户作业
:用户角色门店名称
:具有门店角色的用户的门店名称品牌
:品牌产品代表编号
:代表具有代表角色的用户省市
:省市代表或门店名称
如您所见,这里是gridview
中的表组合我的问题是使用
newquery()
组合搜索中的查询
我的部分代码如下:
用户搜索模型
:
public function search($params)
{
$query = Users::find();
if(isset($params['UserSearch']['user_job']) && !empty($params['UserSearch']['user_job'])) {
$role = $params['UserSearch']['user_job'];
$query->join('LEFT JOIN','auth_assignment','auth_assignment.user_id = temp_users.user_id')
->andFilterWhere(['auth_assignment.item_name' => $role, 'user_default_business' => [2, 4, 5]]);
} elseif(isset($params['UserSearch']['brand']) && !empty($params['UserSearch']['brand'])) {
$brand = $params['UserSearch']['brand'];
$query->join('LEFT JOIN', 'temp_representative',
'temp_representative.id = temp_users.user_id')
->join('LEFT JOIN', 'temp_store', 'temp_store.id = temp_users.user_id')
->andFilterWhere(['or',
['like', 'temp_representative.business_id', $brand],
['like', 'temp_store.business_id', $brand]
]);
}
elseif (isset($params['UserSearch']['rep_no']) && !empty($params['UserSearch']['rep_no'])){
$code = $params['UserSearch']['rep_no'];
$query->join('LEFT JOIN', 'temp_representative',
'temp_representative.user_id = temp_users.user_id')
->andFilterWhere(['like', 'rep_no', $code]);
}
elseif (isset($params['UserSearch']['city_province']) && !empty($params['UserSearch']['city_province'])){
$name = $params['UserSearch']['city_province'];
$query->join('LEFT JOIN', 'temp_store',
'temp_store.user_id = temp_users.user_id')
->join('LEFT JOIN', 'temp_representative', 'temp_representative.user_id = temp_users.user_id')
->andFilterWhere(['or',
['like','store_city',$name],
['like','store_province',$name],
])
->orFilterWhere(['or',
['like','rep_city',$name],
['like','rep_province',$name]
]);
}
elseif (isset($params['UserSearch']['store_name']) && !empty($params['UserSearch']['store_name'])){
$storeName = $params['UserSearch']['store_name'];
$query->join('LEFT JOIN', 'temp_store',
'temp_store.user_id = temp_users.user_id')
->andFilterWhere(['like', 'store_name', $storeName]);
} else {
$query = Users::find()->where(['user_default_business' => [2, 4, 5]]);
}
$dataProvider = new ActiveDataProvider([
'query' => $query
]);
if(!(($this->load($params)) && $this->validate())){
return $dataProvider;
}
$query->andFilterWhere(['like', 'user_name_family', $this->user_name_family])
->andFilterWhere(['like', 'user_phone', $this->user_phone]);
return $dataProvider;
}
每个字段本身都可以正常工作,但如果组合起来,则无法正常工作,例如:当我们输入两个字段brand
和city-province
时,过滤仅适用于最后一个字段
如果不使用活动记录关系,请告诉我如何解决此问题?谢谢。以下构造意味着只执行一个匹配场景
if ($scenario1) {
// ...
}
elseif ($scenario2) {
// ...
}
elseif ($scenario3) {
// ...
}
如果要执行所有匹配方案,请使用If
运算符:
if ($scenario1) {
// ...
}
if ($scenario2) {
// ...
}
if ($scenario3) {
// ...
}
粗心和粗心。。。谢谢你,你说得对。