solutosoft / yii-linkmany
自动加载、验证和保存相关Active Record模型
1.1.3
2022-09-14 18:39 UTC
Requires
- yiisoft/yii2: ~2.0.14
Requires (Dev)
- phpunit/phpunit: ^7.5 || ^8.0
README
自动加载、验证和保存 hasMany
关系。
安装
安装此扩展的首选方法是通过 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, ]); } }
致谢
本包灵感来源于
我希望结合两者的优点。感谢这两位作者。