Hola Pascal, ante todo feliz año (aunque sea ya dia 7), tengo un problema, tengo una tabla en la que asigno jugadores,equipo,temporada y categoria:
CREATE TABLE `asig_jug_equipo` (
`idasig` int(11) NOT NULL,
`id_equipo` int(11) DEFAULT NULL,
`id_usuario` int(11) DEFAULT NULL,
`id_temporada` int(11) DEFAULT NULL,
`id_categoria` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
con este controlador los asigno, pero mi intención es que el jugador no se puede duplicar en la misma temporada:
static protected function action_RecJugEquipos() {
$request = new \Request();
$selectJugadores = $request->jugadores; // Array of the selected products in the listbox
$selectEquipo = $request->equipo; // Product category selected in the dropdown
$selectcategoria = $request->categoria;
$selecttemporada = $request->temporada;
$jugadoresDAO = new asigjugaDAO(); // The custom DAO used to store the product data
foreach ($selectJugadores as $value) {
$jugadoRow = ['id_usuario' => $value, 'id_equipo' => $selectEquipo, 'id_categoria' => $selectcategoria,'id_temporada' => $selecttemporada];
$jugadoresDAO->store($jugadoRow);
}
$jugadequipsucess = new \app\model\jugadasigDAO();
foreach ($selectJugadores as $value) {
$valoractivo = 1;
$jugadoRowsucess = ['id_usuario' => $value, 'Use_activo_temporada' => $valoractivo];
$jugadequipsucess->store($jugadoRowsucess);
}
// JSON Response
$response = new \Response();
$response->setSuccessMessage("Asingación", "Asignacion correcta");
return $response;
}
mediante esta consulta los muestro en otra vista diferente a la de asignación a fin de controlar los jugadores por equipo y poder modificar el equipo al que pertenecen durante la misma temporada:
class tjugadorDAO extends \DAO {
protected function initDaoProperties() {
$this->table = "usuarios";
$this->IdColumnName = "id_usuario";
$this->query = "select usuarios.* , equipos.nombre_equipo , temporadas.nombre_temporada from usuarios ";
$this->query .= " INNER JOIN temporadas on temporadas.id_temporada=A.id_temporada";
$this->query .= "INNER JOIN asig_jug_equipo A on A.id_usuario=usuarios.id_usuario ";
$this->query .= "INNER JOIN equipos on equipos.id_equipo=A.id_equipo ";
}
public function setFilterEntUser($id) {
$this->filterClause = " where equipos.nombre_equipo like lower(?)";
$this->setFilterCriteria($id);
}
}
este es el dialogo con el que quiero modificar el equipo del jugador:
<form class="zdk-form" id="mis_jugadores"
data-zdk-action="tjugadoresctrl:enregistrer"
data-zdk-datatable="table_Tjugadores">
<div id="default">
<ul>
<li><a href="#tab1">Datos deportivos</a></li>
</ul>
<div>
<div id="tab1" >
<fieldset>
<input class="zdk-row-id" type="hidden" name="idasig" >
<input type="text" name="id_usuario" >
<label>Equipo actual</label><input type="text" name="nombre_equipo" disabled/>
<label>Nuevo Equipo : </label>
<select class="zdk-dropdown" name="id_equipo"
data-zdk-noselection="Seleccionar un valor..." data-zdk-action="equiposctrl:getEquipos"></select>
</fieldset>
<button class="zdk-bt-save zdk-close-dialog" type="submit">Guardar</button>
<button class="zdk-bt-cancel zdk-close-dialog" type="button">Cancelar</button>
</div>
</div>
</div>
</form>
esta seria mi vista :
<div id="table_Tjugadores" class="zdk-datatable zdk-synchronize" title="Jugadores"
data-zdk-action="tjugadoresctrl:lister" data-zdk-paginator="10"
data-zdk-columns='[{"field":"id_usuario", "headerText": "Número"},
{"field":"Use_nombre", "headerText": "Nombre"},
{"field":"Use_apellidos", "headerText": "apellidos"},
{"field":"nombre_equipo", "headerText": "Equipo"},
{"field":"nombre_temporada", "headerText": "Temporada"},
{"field":"Use_dorsal", "headerText": "Dorsal"}
]'>
</div>
y con este controlador es con el que la muestro , también para hacer filtros por equipo pero me muestra equipos con nombres parecidos, por ejemplo (benjamin A me muestra benjamin A y prebenjamin A despues de pulsar el botón buscar):
class tjugadoresctrl extends \AppController {
static protected function action_lister() {
// 1) Read POST parameters
$request = new \Request();
// --> Pagination
$first = $request->first;
$rows = $request->rows;
// --> Sort criteria
$sortField = $request->sortfield;
$sortOrder = $request->sortorder;
$sortCriteria = is_null($sortField) ? 'nombre_equipo' : $sortField . (is_null($sortOrder) ? ' ASC' : $sortOrder == 1 ? ' ASC' : ' DESC');
// --> Filter criteria
$criteria = $request->search_criteria;
$filtro = '%' . $criteria . '%';
$response = new \Response();
$jugadorid = new tjugadorDAO();
$jugadorid->setFilterEntUser($filtro);
$jugadores = array();
try {
$response->total = $jugadorid->getCount();
$jugadorid->setSortCriteria($sortCriteria);
$jugadorid->setLimit($first, $rows);
while ($row = $jugadorid->getResult()) {
$jugadores[] = $row;
}
/* Réponse retournée au contrôleur principal */
$response->rows = $jugadores;
$response->success = true;
} catch (\PDOException $ex) {
$response->setFailedMessage("Dato no encotrado", "No se ha podido encontrar el usuario (error '" . $ex->getCode() . "')");
}
// 3) Return JSON response
return $response;
}
y este es el controlador con el que guardo los cambios en la tabla asig_jug_equipo y el dao correspondiente:
static protected function action_enregistrer() {
/* Lecture des données de la requête HTTP */
$request = new \Request();
$row = $request->getValuesAsMap('id_equipo', 'id_usuario');
/* Enregistrement des données en Base de données */
$jugadormodifDAO = new \app\model\tjugadormodifequipDAO();
$result = $jugadormodifDAO->store($row);
/* Réponse retournée au contrôleur principal */
$response = new \Response();
if ($result) {
$response->setSuccessMessage('Guardar', 'Jugador guardado correctamente.');
} else {
$response->setFailedMessage('Guardar', "El jugador no ha sido guardado.");
}
return $response;
}
DAO:
namespace app\model;
class tjugadormodifequipDAO extends \DAO {
protected function initDaoProperties() {
$this->table = "asig_jug_equipo";
$this->IdColumnName = "idasig";
$this->query = "select asig_jug_equipo.* from asig_jug_equipo ";
}
}
Agradecido de antemano, un abrazo