PHPackages                             jiuly256/yii2-multi-model-helper - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. jiuly256/yii2-multi-model-helper

ActiveYii2-extension[Utility &amp; Helpers](/categories/utility)

jiuly256/yii2-multi-model-helper
================================

Extensión Yii2 para gestionar múltiples modelos dinámicos de forma segura y robusta.

v1.0.0(5mo ago)04MITPHP

Since Nov 18Pushed 5mo agoCompare

[ Source](https://github.com/jiuly256/yii2-multi-model-helper)[ Packagist](https://packagist.org/packages/jiuly256/yii2-multi-model-helper)[ RSS](/packages/jiuly256-yii2-multi-model-helper/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (1)Versions (2)Used By (0)

🐬 ModelHelper para Yii2 — Gestión avanzada de múltiples modelos dinámicos
=========================================================================

[](#-modelhelper-para-yii2--gestión-avanzada-de-múltiples-modelos-dinámicos)

Un componente ligero, robusto y totalmente reutilizable para manejar **creación, carga, validación y borrado automático de múltiples modelos** en un solo formulario dinámico en Yii2.

[![License: MIT](https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667)](LICENSE)[![Yii2](https://camo.githubusercontent.com/b5bfa2653cfe0435562be6f9e484dc86f22eeec1f2891ab12fb151948aeee3b8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f596969322d4672616d65776f726b2d626c7565)](https://camo.githubusercontent.com/b5bfa2653cfe0435562be6f9e484dc86f22eeec1f2891ab12fb151948aeee3b8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f596969322d4672616d65776f726b2d626c7565)[![Status](https://camo.githubusercontent.com/425de316fa65743cca27fd2b490b0be69175609ced2e96dfabd8f1303d6ec591/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f537461626c652d5965732d627269676874677265656e)](https://camo.githubusercontent.com/425de316fa65743cca27fd2b490b0be69175609ced2e96dfabd8f1303d6ec591/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f537461626c652d5965732d627269676874677265656e)[![PHP](https://camo.githubusercontent.com/f68c41f76d7f91a9a6b6d0826e3262d6275badff91139640ace8b7f95b0146c7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d352e36253242253230253743253230372e78253230253743253230382e782d3737374242343f6c6f676f3d706870)](https://camo.githubusercontent.com/f68c41f76d7f91a9a6b6d0826e3262d6275badff91139640ace8b7f95b0146c7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d352e36253242253230253743253230372e78253230253743253230382e782d3737374242343f6c6f676f3d706870)

---

🚀 ¿Qué resuelve este paquete?
-----------------------------

[](#-qué-resuelve-este-paquete)

Yii2 ofrece `loadMultiple` y `validateMultiple`, pero no resuelve el *problema real*:

- Reconstruir N modelos dinámicos enviados por POST
- Detectar elementos eliminados en el frontend
- Crear automáticamente nuevos registros
- Evitar índices rotos y conflictos de ID
- Validación y guardado masivo sencillo

Con una sola línea:

```
$modelos = ModelHelper::createMultiple(MyModel::class, $modelosIniciales);
```

📦 Instalación (Composer)
------------------------

[](#-instalación-composer)

```
composer require jiuly256/yii2-modelhelper
```

🔧 Uso básico en controlador
---------------------------

[](#-uso-básico-en-controlador)

```
use jiuly256\modelhelper\ModelHelper;
use yii\base\Model;
use yii\helpers\ArrayHelper;

public function actionMultiple($id)
{
    $modelos = MyModel::findAll(['parent_id' => $id]);

    if (empty($modelos)) {
        $modelos = [new MyModel(['parent_id' => $id])];
    }

    if (Yii::$app->request->isPost) {
        $oldIDs = ArrayHelper::map($modelos, 'id', 'id');
        $modelos = ModelHelper::createMultiple(MyModel::class, $modelos);
        Model::loadMultiple($modelos, Yii::$app->request->post());

        $newIDs = ArrayHelper::map($modelos, 'id', 'id');
        $deletedIDs = array_diff($oldIDs, $newIDs);

        if ($deletedIDs) {
            MyModel::deleteAll(['id' => $deletedIDs]);
        }

        if (Model::validateMultiple($modelos)) {
            foreach ($modelos as $m) {
                $m->parent_id = $id;
                $m->save(false);
            }
            return $this->redirect(['view', 'id' => $id]);
        }
    }

    return $this->render('multiple', [
        'modelos' => $modelos
    ]);
}
```

📄 Vista ejemplo multi-model-example.php
---------------------------------------

[](#-vista-ejemplo-multi-model-examplephp)

```

Ejemplo de Multi-Model

            Atributos
            Eliminar
