Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/solutosoft/yii-linkmany
Load, validate and save automatically `hasMany` related Active Record models.
https://github.com/solutosoft/yii-linkmany
activerecord hasmany relations relationships yii2 yii2-extension
Last synced: 2 months ago
JSON representation
Load, validate and save automatically `hasMany` related Active Record models.
- Host: GitHub
- URL: https://github.com/solutosoft/yii-linkmany
- Owner: solutosoft
- Created: 2018-08-28T10:07:37.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2022-09-14T18:48:40.000Z (over 2 years ago)
- Last Synced: 2024-04-23T22:09:30.195Z (9 months ago)
- Topics: activerecord, hasmany, relations, relationships, yii2, yii2-extension
- Language: PHP
- Homepage:
- Size: 37.1 KB
- Stars: 4
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# Yii LinkMany
Load, validate and save automatically `hasMany` relations.
[![Build Status](https://github.com/solutosoft/yii-linkmany/actions/workflows/tests.yml/badge.svg)](https://github.com/solutosoft/yii-linkmany/actions)
[![Total Downloads](https://poser.pugx.org/solutosoft/yii-linkmany/downloads.png)](https://packagist.org/packages/solutosoft/yii-linkmany)
[![Latest Stable Version](https://poser.pugx.org/solutosoft/yii-linkmany/v/stable.png)](https://packagist.org/packages/solutosoft/yii-linkmany)Installation
------------The preferred way to install this extension is through [composer](http://getcomposer.org/download/).
Either run
```
php composer.phar require --prefer-dist solutosoft/yii-linkmany
```or add
```json
"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:```php
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]]
```php
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:
- [la-haute-societe/yii2-save-relations-behavior](https://github.com/la-haute-societe/yii2-save-relations-behavior)
- [yii2tech/ar-linkmany](https://github.com/yii2tech/ar-linkmany).I wanted to have a combination of both. Thanks to both authors.