<?php namespace frontend\modules\api\models; use backend\modules\card\models\UserCard; use common\classes\Debug; use yii\base\Model; /** * Class ProfileSearchForm * @property integer $limit * @property integer $offset * @property integer $id * @package frontend\modules\api\models */ class ProfileSearchForm extends Model { public $limit = 10; public $offset = 0; public $skills; public $position_id; public $id; public function rules() { return [ [['id', 'limit', 'offset', 'position_id'], 'safe'], [['skills'], 'checkIsArray'], ]; } public function exclude($arr) { $ex = ['passport', 'resume', 'link_vk', 'link_telegram', 'email', 'salary']; foreach ($ex as $remove) { if (isset($arr[$remove])) { unset($arr[$remove]); } } return $arr; } public function checkIsArray() { if (!is_array($this->_task)) { $this->addError('_task', 'X is not array!'); } } public function byId() { if ($this->id) { return $this->exclude(UserCard::find() ->where(['id' => $this->id]) ->with(['skillValues']) ->with(['achievements']) ->asArray() ->one()); } return null; } public function byParams() { $model = UserCard::find(); if ($this->skills) { $model->joinWith(['skillValues']); $this->skills = explode(',', $this->skills); $model->where(['card_skill.skill_id' => $this->skills]); $model->having('COUNT(DISTINCT skill_id) = ' . count($this->skills)); } else { $model->joinWith('skillValues'); } $model->joinWith('achievements'); $model->andFilterWhere(['position_id' => $this->position_id]); $model->andWhere(['status' => [4, 12]]); $model->andWhere(['deleted_at' => null]); //$model->groupBy('card_skill.card_id'); $res = $model->limit($this->limit) ->offset($this->offset)->orderBy('updated_at DESC')->asArray()->all(); if(!$res){ return []; } $resArr = []; foreach ($res as $re){ $resArr[] = $this->exclude($re); } return $resArr; } }