My real code.
My view:
And I remember inputs with models does not work too, I mean Espacios.name and Usuarios.name
<div class="box">
<?php
echo $this->tag->form(
[
"admin/espacios/index",
"autocomplete" => "off",
"class" => "form-row"
]
);
?>
<div class="form-group col-md-4 col-sm-4 col-xs-12">
<label for="fieldEspacioName">Nombre espacio</label>
<?php echo $this->tag->textField(["name", "size" => 30, "class" => "form-control", "id" => "fieldEspacioName"]); ?>
</div>
<div class="form-group col-md-4 col-sm-4 col-xs-12">
<label for="fieldNombreUser">Nombre usuario</label>
<?php echo $this->tag->textField(["name", "size" => 30, "class" => "form-control", "id" => "fieldNombreUser"]); ?>
</div>
<div class=" col-md-12 col-sm-12 col-xs-12 textcenter">
<?php echo $this->tag->submitButton(["Buscar", "class" => "btn btn-default"]); ?>
</div>
<?php echo $this->tag->endForm(); ?>
</div>
Model Espacios and Usuarios have the same field:
/**
*
* @var string
*/
public $name
Controller (Criteria + Paginator + Query with Joins), all is ok within same field.
$numberPage = 1;
if ($this->request->isPost()) {
$query = Criteria::fromInput($this->di, 'Salamandra\Models\Admin\Espacios', $_POST);
$params = $query->getParams();
$queryPart = Criteria::fromInput($this->di, 'Salamandra\Models\Admin\Usuarios', $_POST);
$paramsPart = is_null($queryPart->getParams()) ? null : $queryPart->getParams();
if(isset($paramsPart) && !empty($paramsPart)){
if (isset($params['conditions']) && !empty($params['conditions']) && (isset($paramsPart['conditions']) && !empty($paramsPart['conditions']))) {
$params['conditions'] .= ' and ' . $paramsPart['conditions'];
$params['bind'] = array_merge($paramsPart['bind'], $params['bind']);
} elseif (isset($paramsPart['conditions']) && !empty($paramsPart['conditions'])) {
$params = $paramsPart;
}
}
$this->session->set('condiciones-espacios-buscar', $_POST);
$this->persistent->parameters = $params;
if (!empty($_POST['ordenar_por'])) {
$ordenarPor = 'Espacios.' . $_POST['ordenar_por'] . ' DESC';
$this->session->set('condiciones-ordenar-espacios-buscar', $ordenarPor);
} else {
$this->session->remove('condiciones-ordenar-espacios-buscar');
}
} else {
if ($this->session->has('condiciones-ordenar-espacios-buscar')) $ordenarPor = $this->session->get('condiciones-ordenar-espacios-buscar');
$numberPage = $this->request->getQuery("page", "int");
}
$parameters = $this->persistent->parameters;
if (!is_array($parameters)) {
$parameters = [];
} else {
// si pagina mantenemos los valores de los input en la vista
$_POST = $this->session->get('condiciones-espacios-buscar');
}
// con el builder cogemos solo el data necesario para el paginador y en el createBuilder podemos insertar
// los parĂ¡metros del componente Criteria
$builder = $this->modelsManager->createBuilder($parameters)
->columns(['Espacios.nombre_espacio AS nombre_espacio', 'Espacios.created AS created', 'Usuarios.nickname AS nickname',
'Espacios.id AS id', 'Usuarios.nickname AS apellidos', 'MensajesTiemposRespuesta.tiempo_respuesta AS tiempo_respuesta',
'MensajesTiemposRespuesta.total_mensajes as total_mensajes', 'Espacios.activo_espacio as activo', 'Espacios.slug as slug',
'Espacios.modified AS modified'])
->from(['Espacios' => 'Salamandra\Models\Admin\Espacios'])
->leftJoin('Salamandra\Models\Admin\Usuarios', 'Usuarios.id = Espacios.usuario_id', 'Usuarios')
->leftJoin('Salamandra\Models\MensajesTiemposRespuesta', 'Espacios.id = MensajesTiemposRespuesta.espacio_id', 'MensajesTiemposRespuesta')
->orderBy($ordenarPor);
$paginator = new PaginatorQueryBuilder(
[
'builder' => $builder,
'limit' => 15,
'page' => $numberPage,
]
);
$this->view->page = $paginator->getPaginate();