/** * Add synonyms. * @param string|string[]|Synonym|Synonym[] $synonyms * `string`: Synonym string. * `string[]`: Synonym string array. * `Synonym`: Synonym model. * `Synonym[]`: Synonym models. * String if it is a synonym string, or Synonym instance. * @return boolean * @throws InvalidParamException */ public function setSynonyms($synonyms) { if (is_string($synonyms)) { if (Synonym::find()->where(['word' => $synonyms, 'headword_guid' => $this->guid])->exists()) { throw new InvalidParamException('The synonyms: `' . $synonyms . '` has existed.'); } $model = new Synonym(['word' => $synonyms, 'headword' => $this]); return $model->save(); } if ($synonyms instanceof Synonym) { if (Synonym::find()->where(['word' => $synonyms->word, 'headword_guid' => $this->guid])->exists()) { throw new InvalidParamException('The synonyms: `' . $synonyms->word . '` has existed.'); } $synonyms->headword = $this; return $synonyms->save(); } if (is_array($synonyms)) { foreach ($synonyms as $syn) { if (!$this->setSynonyms($syn)) { Yii::error('Synonyms failed to add.', __METHOD__); } } } return true; }