Inicio
NexoPOS

Dependencia de modelos

La dependencia del modelo se ha introducido en NexoPOS 4.7.x, y principalmente ayuda a evitar la eliminación de recursos que otros modelos requieren. Técnicamente, esto significa que antes de eliminar una categoría, NexoPOS comprobará si hay un producto asignado a esa categoría para evitar la eliminación.

Esta guía explica cómo funciona la dependencia del modelo en NexoPOS.

Declarando dependencia

Esto debe crearse en el propio modelo. En el modelo indicamos que otro modelo tiene una dependencia. Un modelo puede depender de muchos otros modelos. Cada dependencia debe definirse claramente para evitar la eliminación.

Para declarar una dependencia, necesitamos declarar una propiedad protegida llamada "isDependencyFor" así.


<?php
namespace App\Models\Category;


class Category extends NsModel
{
    protected $isDependencyFor  = [
        // dependencies goes here
    ]
}

Esa propiedad acepta como clave la clase de modelo, que depende del modelo actual y de la configuración como valor.

<?php
namespace App\Models\Category;


class Category extends NsModel
{
    protected $isDependencyFor  = [
        Product::class  =>  [
            // define configuration
        ]
    ];
}

Aquí están los valores admitidos para cada dependencia:

  • local_name: Atributo real del que se extraerá el nombre del modelo. Se utilizará para generar un error comprensible.
  • local_index: Es el atributo real que se utiliza para comparar en modelos dependientes. Por lo general, el valor es «id».
  • foreign_name: Atributo de la dependencia encontrada para obtener su nombre. Esto también se usará para generar un error comprensible.
  • foreign_index: Ese es el atributo que coincide con el índice local, utilizado para identificar la dependencia.

Como nuestro modelo es «Categoría», declaramos que eso fuera una dependencia de «Producto». Aquí está la forma final de nuestra configuración.

<?php
namespace App\Models\Category;


class Category extends NsModel
{
    protected $isDependencyFor  = [
        Product::class  =>  [
            'local_name'  =>  'name',
            'local_index' =>  'id',
            'foreign_name'  =>  'name',
            'foreign_index' =>  'category_id'
        ]
    ];
}

Al intentar eliminar, terminarás con el siguiente error.

En caso de que se haya encontrado una dependencia.