重写find方法
yii2 2018-10-23 20:16:12

 

新建一个query

 

PHP Code复制内容到剪贴板
  1. namespace common\models\query;  
  2.   
  3. use backend\modules\invest\models\ProjectRecord;  
  4. use yii\db\ActiveQuery;  
  5. use yii\helpers\ArrayHelper;  
  6.   
  7. class ProjectQuery extends ActiveQuery  
  8. {  
  9.   
  10.     /** 
  11.      * 仅当前项目的 
  12.      * @return $this 
  13.      */  
  14.     public function onlyCurrentProject()  
  15.     {  
  16.         $tableName = $this->modelClass;  
  17.         $projectId = \Yii::$app->tool->getCurrentPid();  
  18.         $ids = ProjectRecord::find()->select("entity_id,attribute")->where(['project_id'=>$projectId,'entity'=>$tableName])->all();  
  19.         if(!$ids){  
  20.             return $this->andWhere('0=1');  
  21.         }  
  22.         $attribute = $ids?$ids[0]->attribute:"id";  
  23.         $ids = ArrayHelper::getColumn($ids,"entity_id");  
  24.   
  25.         return $this->andWhere(['in'$attribute$ids]);  
  26.     }  
  27.   
  28. }  

 

在每个需要用到这个where条件的model,加一下:

PHP Code复制内容到剪贴板
  1. use common\models\query\ProjectQuery;  
  2.   
  3.   
  4.     public static function find()  
  5.     {  
  6.         return Yii::createObject(ProjectQuery::className(), [get_called_class()]);  
  7.     }  

 

在所有的find方法加一个后缀,onlyCurrentProject:

如:

PHP Code复制内容到剪贴板
  1. Job::find()->onlyCurrentProject()->one();  

 

 

 

 

本文来自于:http://www.yoyo88.cn/study/yii2/378.html

Powered by yoyo苏ICP备15045725号