Inheritance: extends yii\db\ActiveRecord
コード例 #1
0
 public function actionSave()
 {
     if (Yii::$app->request->isPost) {
         $post = Yii::$app->request->post();
         if ($post['payload'] && $post['entityModel']) {
             $payload = Json::decode($post['payload']);
             if (!isset($payload['fields'])) {
                 return;
             }
             $categoryId = isset($post['categoryId']) ? $post['categoryId'] : 0;
             $entityId = EavEntity::find()->select(['id'])->where(['entityModel' => $post['entityModel'], 'categoryId' => $categoryId])->scalar();
             if (!$entityId) {
                 $entity = new EavEntity();
                 $entity->entityName = isset($post['entityName']) ? $post['entityName'] : 'Untitled';
                 $entity->entityModel = $post['entityModel'];
                 $entity->categoryId = $categoryId;
                 $entity->save(false);
                 $entityId = $entity->id;
             }
             foreach ($payload['fields'] as $order => $field) {
                 $attribute = EavAttribute::findOne(['name' => $field['cid'], 'entityId' => $entityId]);
                 if (!$attribute) {
                     $attribute = new EavAttribute();
                     $lastId = EavAttribute::find()->select(['id'])->orderBy(['id' => SORT_DESC])->limit(1)->scalar() + 1;
                     $attribute->name = 'c' . $lastId;
                 }
                 //$attribute->name = $field['cid'];
                 $attribute->type = $field['type'];
                 $attribute->entityId = $entityId;
                 $attribute->typeId = EavAttributeType::find()->select(['id'])->where(['name' => $field['field_type']])->scalar();
                 $attribute->label = $field['label'];
                 //$attribute->defaultValue = '';
                 //$attribute->defaultOptionId = 0;
                 $attribute->required = $field['required'];
                 $attribute->order = $order;
                 $attribute->description = isset($field['field_options']['description']) ? $field['field_options']['description'] : '';
                 $attribute->save(false);
                 if (!isset($field['field_options']['options'])) {
                     continue;
                 }
                 EavAttributeOption::deleteAll(['attributeId' => $attribute->id]);
                 foreach ($field['field_options']['options'] as $o) {
                     $option = new EavAttributeOption();
                     $option->attributeId = $attribute->id;
                     $option->value = $o['label'];
                     $option->defaultOptionId = (int) $o['checked'];
                     $option->save();
                 }
             }
         }
     }
 }
コード例 #2
0
 /**
  * Creates data provider instance with search query applied
  *
  * @param array $params
  *
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     $query = EavAttributeOption::find();
     // add conditions that should always apply here
     $dataProvider = new ActiveDataProvider(['query' => $query]);
     $this->load($params);
     if (!$this->validate()) {
         // uncomment the following line if you do not want to return any records when validation fails
         // $query->where('0=1');
         return $dataProvider;
     }
     // grid filtering conditions
     $query->andFilterWhere(['id' => $this->id, 'attributeId' => $this->attributeId]);
     $query->andFilterWhere(['like', 'value', $this->value]);
     return $dataProvider;
 }
コード例 #3
0
ファイル: EavAttribute.php プロジェクト: mirocow/yii2-eav
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getEavOptions()
 {
     return $this->hasMany(EavAttributeOption::className(), ['attributeId' => 'id'])->orderBy(['order' => SORT_ASC]);
 }
コード例 #4
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getOption()
 {
     return $this->hasOne(EavAttributeOption::className(), ['id' => 'optionId']);
 }
コード例 #5
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getEavOptions()
 {
     return $this->hasMany(EavAttributeOption::className(), ['attributeId' => 'id']);
 }
コード例 #6
0
 /**
  * Finds the EavAttributeOption model based on its primary key value.
  * If the model is not found, a 404 HTTP exception will be thrown.
  * @param integer $id
  * @return EavAttributeOption the loaded model
  * @throws NotFoundHttpException if the model cannot be found
  */
 protected function findModel($id)
 {
     if (($model = EavAttributeOption::findOne($id)) !== null) {
         return $model;
     } else {
         throw new NotFoundHttpException('The requested page does not exist.');
     }
 }
コード例 #7
0
ファイル: AjaxController.php プロジェクト: mirocow/yii2-eav
 public function actionSave()
 {
     if (Yii::$app->request->isPost) {
         $post = Yii::$app->request->post();
         if ($post['payload'] && $post['entityModel']) {
             $payload = Json::decode($post['payload']);
             if (!isset($payload['fields'])) {
                 return;
             }
             $transaction = \Yii::$app->db->beginTransaction();
             try {
                 $categoryId = isset($post['categoryId']) ? $post['categoryId'] : 0;
                 $entityId = EavEntity::find()->select(['id'])->where(['entityModel' => $post['entityModel'], 'categoryId' => $categoryId])->scalar();
                 if (!$entityId) {
                     $entity = new EavEntity();
                     $entity->entityName = isset($post['entityName']) ? $post['entityName'] : 'Untitled';
                     $entity->entityModel = $post['entityModel'];
                     $entity->categoryId = $categoryId;
                     $entity->save(false);
                     $entityId = $entity->id;
                 }
                 $attributes = [];
                 foreach ($payload['fields'] as $order => $field) {
                     if (!isset($field['cid'])) {
                         continue;
                     }
                     // Attribute
                     if (isset($field['cid'])) {
                         $attribute = EavAttribute::findOne(['name' => $field['cid'], 'entityId' => $entityId]);
                     }
                     if (empty($attribute)) {
                         $attribute = new EavAttribute();
                         $lastId = EavAttribute::find()->select(['id'])->orderBy(['id' => SORT_DESC])->limit(1)->scalar() + 1;
                         $attribute->name = 'c' . $lastId;
                     }
                     $attribute->type = $field['group_name'];
                     $attribute->entityId = $entityId;
                     $attribute->typeId = EavAttributeType::find()->select(['id'])->where(['name' => $field['field_type']])->scalar();
                     $attribute->label = $field['label'];
                     $attribute->order = $order;
                     if (isset($field['field_options']['description'])) {
                         $attribute->description = $field['field_options']['description'];
                         unset($field['field_options']['description']);
                     } else {
                         $attribute->description = '';
                     }
                     $attribute->save(false);
                     $attributes[] = $attribute->id;
                     if (isset($field['field_options']['options'])) {
                         $options = [];
                         foreach ($field['field_options']['options'] as $k => $o) {
                             $option = EavAttributeOption::find()->where(['attributeId' => $attribute->id, 'value' => $o['label']])->one();
                             if (!$option) {
                                 $option = new EavAttributeOption();
                             }
                             $option->attributeId = $attribute->id;
                             $option->value = $o['label'];
                             $option->defaultOptionId = (int) $o['checked'];
                             $option->order = $k;
                             $option->save();
                             $options[] = $option->value;
                         }
                         EavAttributeOption::deleteAll(['and', ['attributeId' => $attribute->id], ['NOT', ['IN', 'value', $options]]]);
                         unset($field['field_options']['options']);
                     }
                     // Rule
                     $rule = EavAttributeRule::find()->where(['attributeId' => $attribute->id])->one();
                     if (!$rule) {
                         $rule = new EavAttributeRule();
                     }
                     $rule->attributeId = $attribute->id;
                     if (!empty($field['field_options'])) {
                         foreach ($field['field_options'] as $key => $param) {
                             $rule->{$key} = $param;
                         }
                     }
                     $rule->required = isset($field['field_options']['required']) ? (int) $field['field_options']['required'] : 0;
                     $rule->visible = isset($field['field_options']['visible']) ? (int) $field['field_options']['visible'] : 0;
                     $rule->locked = isset($field['field_options']['locked']) ? (int) $field['field_options']['locked'] : 0;
                     $rule->save();
                 }
                 $attrArray = EavAttribute::find()->select('id')->where(['AND', ['NOT IN', 'id', $attributes], ['IN', 'entityId', $entityId]])->asArray()->all();
                 if (!is_null($attrArray)) {
                     EavAttribute::deleteAll(['IN', 'id', $attrArray]);
                     EavAttributeValue::deleteAll(['IN', 'attributeId', $attrArray]);
                     EavAttributeOption::deleteAll(['IN', 'attributeId', $attrArray]);
                     EavAttributeRule::deleteAll(['IN', 'attributeId', $attrArray]);
                 }
                 $transaction->commit();
             } catch (\Exception $e) {
                 $transaction->rollBack();
                 throw $e;
             }
         }
     }
 }