user->isGuest) { if(Yii::$app->controller->module->id == 'app-producer') { $params[$options['attribute_id_producer']] = Yii::$app->controller->getProducer()->id ; } else { $params[$options['attribute_id_producer']] = Producer::getId() ; } } if(!isset($options['type_search'])) { $options['type_search'] = self::SEARCH_ALL ; } $records = $class::find() ; // With if(is_array($options['with']) && count($options['with'])) { $records = $records->with($options['with']) ; } // Join with if(is_array($options['join_with']) && count($options['join_with'])) { $records = $records->joinWith($options['join_with']) ; } // Conditions if(isset($options['conditions'])) { if(is_array($options['conditions'])) { if(count($options['conditions'])) { foreach($options['conditions'] as $condition) { $records = $records->andWhere($condition); } } } else { if(strlen($options['conditions'])) { $records = $records->andWhere($options['conditions']); } } } // Params if(isset($options['params']) && is_array($options['params']) && count($options['params'])) { $records = $records->params($options['params']) ; } // Paramètres if(is_array($params) && count($params)) { foreach($params as $key => $val) { if(strpos($key, '.') === false) { unset($params[$key]) ; $key = $class::tableName().'.'.$key ; $params[$key] = $val ; } $records = $records->andWhere([$key => $val]); } } if(!isset($params[$pk])) { // Orderby if (isset($options['orderby']) && strlen($options['orderby'])) { $records = $records->orderBy($options['orderby']); } // Limit if (isset($options['limit']) && is_numeric($options['limit']) && $options['limit'] > 0) { $records = $records->limit($options['limit']); } } if($options['type_search'] == self::SEARCH_ALL) { return $records->all(); } elseif($options['type_search'] == self::SEARCH_ONE) { $record = $records->one(); if($record) { return $record ; } } elseif($options['type_search'] == self::SEARCH_COUNT) { return $records->count() ; } return false ; } /** * Recherche un enregistrement. * * @param array $params * @param array $options * @return mixed */ public static function searchOne($params = [], $options = []) { $options['type_search'] = self::SEARCH_ONE ; return self::searchDispatch($params, $options) ; } /** * Recherche tous les enregistrements. * * @param array $params * @param array $options * @return mixed */ public static function searchAll($params = [], $options = []) { $options['type_search'] = self::SEARCH_ALL ; return self::searchDispatch($params, $options) ; } /** * Recherche et compte le nombre de résultats. * * @param array $params * @param array $options * @return integer */ public static function searchCount($params = [], $options = []) { $options['type_search'] = self::SEARCH_COUNT ; return self::searchDispatch($params, $options) ; } /** * Appelle la méthode 'search' de la classe appellante. * * @param array $params * @param array $options * @return mixed */ public static function searchDispatch($params = [], $options = []) { $class = get_called_class() ; return $class::search($params, $options) ; } }