private function filterRubrics(\yii\db\Query $query) { $rubric_ids = $this->getIds('rubric_ids'); if ($rubric_ids) { $rubrics = Rubric::findRecursive($rubric_ids, 'down'); $rubric_ids = array_merge($rubric_ids, ArrayHelper::getColumn($rubrics, 'id')); $sub_query = CompanyRubric::find()->select('company_rubric.company_id')->where(['company_rubric.rubric_id' => $rubric_ids]); $query->andWhere(['in', 'company.id', $sub_query]); } }
/** * @return \yii\db\ActiveQuery */ public function getCompanyRubrics() { return $this->hasMany(CompanyRubric::className(), ['company_id' => 'id']); }
private function distributeRubrics() { print_r("Distribute rubrics for company..."); $companies = Company::find()->all(); $rubrics = Rubric::findRecursive(array(), 'down', true); $rubrics_ids = ArrayHelper::getColumn($rubrics, 'id'); $rubrics_ids_count = count($rubrics_ids); foreach ($companies as $company) { $this->faker->unique(true); $rubric_for_company_count = $this->faker->numberBetween(self::MIN_RUBRIC_FOR_COMPANY, self::MAX_RUBRIC_FOR_COMPANY); for ($i = 1; $i <= $rubric_for_company_count; $i++) { $company_rubric = new CompanyRubric(); $company_rubric->company_id = $company->id; $company_rubric->rubric_id = $rubrics_ids[$this->faker->unique()->numberBetween(0, $rubrics_ids_count - 1)]; $company_rubric->save(); } } print_r("DONE" . PHP_EOL); }