public function actionSet() { $post = $this->request->post; $pk = $post->get('pk'); $data = $post->get('data', []); $field = $post->get('field'); $name = $post->get('name'); $modelClass = $post->get('modelClass'); if (!$data) { $data = []; } if ($pk && is_array($data) && $field && $name && $modelClass) { CustomRelation::objects()->filter(['owner_pk' => $pk, 'owner_class' => $modelClass, 'field' => $field, 'name' => $name])->delete(); foreach ($data as $position => $item) { list($relatedClass, $relatedPk) = explode(':', $item); $relation = new CustomRelation(); $relation->owner_pk = $pk; $relation->owner_class = $modelClass; $relation->related_pk = $relatedPk; $relation->related_class = $relatedClass; $relation->field = $field; $relation->position = $position + 1; $relation->name = $name; $relation->save(); } } }
public static function getRelated($field, $model, $limit = 10, $offset = 0, $name = null) { $filter = ['owner_pk' => $model->pk, 'owner_class' => $model->className(), 'field' => $field]; if ($name) { $filter['name'] = $name; } $relations = CustomRelation::objects()->filter($filter)->order(['position'])->limit($limit)->offset($offset)->valuesList(['related_pk', 'related_class']); $objects = self::relationsToObjects($relations); return $objects; }
public function getSelected() { $model = $this->getForm()->getInstance(); $value = $this->getValue(); if (!$value && $model->pk) { $data = CustomRelation::objects()->filter(['owner_pk' => $model->pk, 'owner_class' => $model->className(), 'field' => $this->field, 'name' => $this->getName()])->order(['position'])->valuesList(['related_class', 'related_pk']); $value = []; foreach ($data as $item) { $value[] = $item['related_class'] . ':' . $item['related_pk']; } } elseif ($value) { $value = Json::decode($value); } return $value ? $value : []; }