yii2查询具有多个非和或的数据提供程序



大家好:slight_smile:

我尝试显示数据的2个网格视图。第一个gridview,其中三个字段中的任何一个为空(因此,如果其中一个或两个字段为空,它应该显示条目)

和第二个gridview,其中包含填满这3个字段的记录。

我做错了,因为如果输入日期字段,那么记录从第一个到第二个网格视图,事件如果其他2个字段保持空…

这是我的代码:(dataprovider是第二个gridview, unprocessed是第一个)
if(Yii::$app->user->can('admin')){
$searchModel = new DeliverySearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->query->orderBy(['delivery_expedition_date'=>SORT_DESC]);
}
elseif(Yii::$app->user->can('maker')){
$maker = Maker::find()->where(['user_id'=>Yii::$app->user->identity->id])->one();
$searchModel = new DeliverySearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->query->andWhere(['maker_id'=>$maker->id]);
//$dataProvider->query->where(['and',['not',['delivery_trackcode' => null,'delivery_carrier' => null,'delivery_expedition_date' => null]]]);
$dataProvider->query->andWhere(['not', ['delivery_trackcode' => null]]);
$dataProvider->query->andWhere(['not', ['delivery_carrier' => null]]);
$dataProvider->query->andWhere(['not', ['delivery_expedition_date' => null]]);
$dataProvider->query->orderBy(['delivery_expedition_date'=>SORT_DESC]);
$unProcessed = $searchModel->search(Yii::$app->request->queryParams);
$unProcessed->query->andWhere(['maker_id'=>$maker->id]);
$unProcessed->query->andWhere(['or',['delivery_trackcode'=> NULL],['delivery_carrier'=> NULL],['delivery_expedition_date'=> NULL]]);
$unProcessed->query->orderBy(['created_at'=>SORT_DESC]);
}
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
'unProcessed' => $unProcessed,
]);

任何帮助将非常感激:亲切的问候

所以,我终于找到了解决办法。需要检查远征日期是否为NULL,但需要检查承运人和跟踪码是否为空("),而不是NULL

->query->andWhere(['not', ['delivery_trackcode' => null]]);
->query->andWhere(['not', ['delivery_carrier' => null]]);

最新更新