solutosoft/yii-linkmany Load, validate and save automatically related Active Record models

Yii LinkMany

  1. Installation
  2. Usage
  3. Credits

Load, validate and save automatically hasMany relations.

Build Status Scrutinizer Code Quality Code Coverage Total Downloads Latest Stable Version

Installation

The preferred way to install this extension is through composer.

Either run

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

or add

"solutosoft/yii-linkmany": "*"

to the require section of your composer.json.

Usage

This extension provides support for ActiveRecord hasMany relation saving. This support is granted via \solutosoft\linkmany\LinkManyBehavior ActiveRecord behavior. You'll need to attach it to your ActiveRecord class and point the target "has-many" relation for it:

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']);
    }
}

Being attached \solutosoft\linkmany\LinkManyBehavior you can load data using the method \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,
        ]);
    }
}

Credits

This Package is inspired by:

I wanted to have a combination of both. Thanks to both authors.

0 0
1 follower
346 downloads
Yii Version: 2.0
License: BSD-3-Clause
Category: Database
Developed by: leandrogehlen
Created on: Sep 27, 2019
Last updated: a year ago
Packagist Profile
Github Repository

Related Extensions