solutosoft / yii-linkmany

自动加载、验证和保存相关Active Record模型

安装次数: 2,138

依赖项: 0

建议者: 0

安全性: 0

星标: 4

关注者: 2

分支: 0

开放问题: 0

类型:yii2-extension

1.1.3 2022-09-14 18:39 UTC

This package is auto-updated.

Last update: 2024-09-15 00:01:14 UTC


README

自动加载、验证和保存 hasMany 关系。

Build Status Total Downloads Latest Stable Version

安装

安装此扩展的首选方法是通过 composer

运行以下命令之一:

php composer.phar require --prefer-dist solutosoft/yii-linkmany

或将其添加到composer.json的require部分:

"solutosoft/yii-linkmany": "*"

to the require section of your composer.json.

用法

此扩展提供了对ActiveRecord hasMany 关系保存的支持。这种支持是通过[[\solutosoft\linkmany\LinkManyBehavior]] ActiveRecord行为提供的。您需要将其附加到您的ActiveRecord类中,并指定目标"has-many"关系

class Post extends ActiveRecord
{
    public function behaviors()
    {
        return [
            'linkManyBehavior' => [
                'class' => LinkManyBehavior::class,
                'relations' => [
                    'tags',
                    'messages' => [
                        'formName'  => 'Post[messages]',
                        'validate' => false,
                        'deleteOnUnlink' => false
                    ]
                ]
            ],
        ];
    }

    public function getMessages()
    {
        return $this->hasMany(Message::class, ['post_id' => 'id']);
    }

    public function getTags()
    {
        return $this->hasMany(Tag::class, ['id' => 'tag_id'])
            ->viaTable('post_tag', ['post_id' => 'id']);
    }
}

附加[[\solutosoft\linkmany\LinkManyBehavior]]后,您可以使用[[\solutosoft\linkmany\LinkManyBehavior::fill]]方法加载数据

use yii\web\Controller;

class PostController extends Controller
{
    public function actionCreate()
    {
        $model = new Post();


        /**
         * $_POST could be something like:
         * [
         *     'tags' => [1,2]
         *     'comments' => [
         *         [
         *             'subject' => 'First comment',
         *             'content' => 'This is de fist comment',
         *         ], [
         *             'subject' => 'Second comment',
         *             'content' => 'This is de second comment',
         *         ]
         *     ]
         * ];
         */
        if ($model->fill(Yii::$app->request->post())) {
            $model->save(); // save the model and relations
            return $this->redirect(['view']);
        }

        return $this->render('create', [
            'model' => $model,
        ]);
    }
}

致谢

本包灵感来源于

我希望结合两者的优点。感谢这两位作者。