public function checkExistParams($attribute, $params) { if (!$this->hasErrors()) { if (!class_exists($this->leftClass)) { $this->addError(Yii::t("models", "Ошибка сохранения связей"), Yii::t("models", "Неверное указанно значение Left Class")); } if (!$this->hasErrors() && !class_exists($this->rightClass)) { $this->addError(Yii::t("models", "Ошибка сохранения связей"), Yii::t("models", "Неверное указанно значение Right Class")); } if (!$this->hasErrors()) { $leftClassName = $this->leftClass; $leftModel = $leftClassName::fetch($this->leftId); if ($leftModel->id > 0) { $rightClassName = $this->rightClass; $rightModel = $rightClassName::fetch($this->rightId); if ($rightModel->id > 0) { $catRelation = CatRelations::findByAttributes(array("leftId" => $this->leftId, "rightId" => $this->rightId, "leftClass" => $this->leftClass, "rightClass" => $this->rightClass)); if (sizeof($catRelation) > 0) { $this->addError(Yii::t("models", "Ошибка сохранения связей"), Yii::t("models", "Запись с указанными параметрами уже зарегистрирована в базе")); } } else { $this->addError(Yii::t("models", "Ошибка сохранения связей"), Yii::t("models", "Неверное указанно значение Right ID")); } } else { $this->addError(Yii::t("models", "Ошибка сохранения связей"), Yii::t("models", "Неверное указанно значение Left ID")); } } } }
public static function getRelationLeftItems(CCModel $model, $classRelation) { $leftClass = get_class($model); $res = CatRelations::fetchAll(DBQueryParamsClass::CreateParams()->setConditions("leftClass=:leftClass AND rightClass=:rightClass AND leftId=:id")->setParams(array(":leftClass" => $leftClass, ":rightClass" => $classRelation, ":id" => $model->id))->setLimit(-1)->setCache(0)); $list = []; foreach ($res as $items) { $list[] = $items->rightId; } return $list; }
static function saveRelation(CCModel $model, $values) { foreach ($model->relations() as $value) { if ($value[0] == "CManyManyRelation") { $leftClass = $value[1]; $rightClass = SiteHelper::getCamelCase($model->tableName()); CatRelations::sql("DELETE FROM cat_relations WHERE ( leftClass='" . $leftClass . "' AND rightClass='" . $rightClass . "') OR ( leftClass='" . $rightClass . "' AND rightClass='" . $leftClass . "') "); foreach ($values as $value2) { $new = new CatRelations(); $new->leftClass = $leftClass; $new->rightClass = $rightClass; $new->leftId = $value2; $new->rightId = $model->id; $new->save(); $new = new CatRelations(); $new->leftClass = $rightClass; $new->rightClass = $leftClass; $new->leftId = $model->id; $new->rightId = $value2; $new->save(); } } } }
<?php foreach ($form->relations() as $relation) { ?> <?php if ($relation[0] == CCModel::HAS_MANY || $relation[0] == CCModel::MANY_MANY) { // Связь многие ко многим или многоие к одному ?> <h3><?php echo $relation[1]; ?> </h3> <div class="listItems"> <?php // Собираем ID значание из связанной таблицы в масив чтобы потом проверять м т $listValue = array(); foreach (CatRelations::fetchAll(DBQueryParamsClass::CreateParams()->setConditions("leftId=:leftId AND leftClass=:leftClass AND rightClass=:rightClass")->setParams(array(":leftId" => $form->id, ":leftClass" => SiteHelper::getCamelCase($form->tableName()), ":rightClass" => $relation[1]))->setCache(0)) as $itemValue) { $listValue[] = $itemValue->rightId; } $relationTable = $relation[1]; if (!property_exists($relationTable, "owner")) { $listItems = $relationTable::fetchAll(DBQueryParamsClass::CreateParams()->setOrderBy("name")->setLimit(-1)->setCache(0)); } else { $listItems = $relationTable::fetchAll(DBQueryParamsClass::CreateParams()->setConditions("owner=0")->setOrderBy("name")->setLimit(-1)->setCache(0)); } foreach ($listItems as $relationItem) { ?> <div><input type="checkbox" <?php echo in_array($relationItem->id, $listValue) ? "checked=\"checked\"" : ""; ?> name="<?php echo SiteHelper::getCamelCase($form->tableName()) . "[" . $relation[1];