Example #1
0
 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 : [];
 }