Con este campo podemos vincular o relacionar nuestro datos o otros datos que se encuentran en nuestra base de datos. Para ello debe haber 3 Tablas: Tabla1, Tabla2 y otra tabla que las relacione como relationTabla1Tabla2.
Atención
Si hay un parámetro mal configurado puede dar a errores con la posibilidad de que el YAML LIST donde se encuentra el campo no se abre o no se llegue a guardar correctamente.
RelationEntity:
type: multiselect
source:
data: mapper
config:
relationMapper: \MyApp\Mapper\Sql\RelationEntity
relatedMapperName: \MyApp\Mapper\Sql\Entity
relatedFieldName: nameEntity
relationProperty: Entity
Suponemos que añadimos este campo multiselect al YAML MODEL de la Tabla1
<?php
/**
* Parent relation RelationEntity_ibfk_2
*
* @var \MyApp\Model\Raw\RelationEntity
*/
protected $_Entity;
El siguiente ejemplo pertenece a la tabla KlearUsers, KlearRoles y su tabla que las relaciona KlearUsersRoles.
KlearUsersRoles:
title: _('Roles')
type: multiselect
source:
data: mapper
config:
relationMapper: \KlearInterval\Mapper\Sql\KlearUsersRoles
relatedMapperName: \KlearInterval\Mapper\Sql\KlearRoles
relatedFieldName: name #Nombre de un campo de la tabla Roles
relationProperty: KlearRole
El filterClass es una clase para filtrar los valores que nos ofrece el multiselect. Por ejemplo, si no queremos que nos aparezca todos los valores de una tabla pues podemos colocar una condición y los valores que la cumpla pues se mostrará en el listado del multiselect.
RelationEntity:
type: multiselect
source:
data: mapper
config:
relationMapper: \MyApp\Mapper\Sql\RelationEntity
relatedMapperName: \MyApp\Mapper\Sql\Entity
relatedFieldName: nameEntity
relationProperty: Entity
filterClass: Application_Filter_Name
Nota
Por formalidad, el siguiente archivo php lo solemos crear en nuestra carpeta library/Applicationlib/Filter.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <?php
class Application_Filter_Name implements KlearMatrix_Model_Field_Select_Filter_Interface
{
protected $_condition = array();
public function setRouteDispatcher(KlearMatrix_Model_RouteDispatcher $routeDispatcher)
{
//Get Action
$currentAction = $routeDispatcher->getActionName();
//Get Controller
$currentController = $routeDispatcher->getControllerName();
//Get ModelName and your Controller
$currentItemName = $routeDispatcher->getCurrentItemName();
//NUESTRA CONDICIÓN CON CODIO WHERE MYSQL
$this->_condition[] = "active = 1";
//En este ejemplo decimos que solo muestre los valores cuyo campo Active = 1
return true;
}
public function getCondition()
{
if (count($this->_condition) > 0) {
return '(' . implode(" AND ", $this->_condition) . ')';
}
return;
}
}
|
Para incorporar el autocomplete en nuestro campo multiselect, hay que configurar los siguientes códigos:
En el YAML MODEL model.yaml
RelationEntity:
type: multiselect
source:
data: mapper
config:
relationMapper: \MyApp\Mapper\Sql\RelationEntity
relatedMapperName: \MyApp\Mapper\Sql\Entity
relatedFieldName: nameEntity
relationProperty: Entity
decorators:
autocomplete:
command: autocomplete_command
En el YAML LIST que usará el campo select autocomplete, la sección “commands” debe contener lo siguiente:
commands:
autocomplete_command:
<<: *Entity
controller: field-decorator
action: index
autocomplete:
filterClass: Filter_Class_Name
condition: 'active = 1'
mapperName: \MyApp\Mapper\Sql\Entity
label: nameFieldShow
fieldName:
fields:
- name
- nif
template: '%name% [%nif%]'
limit: 8
order: MAC