Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Cake Php error SQL query

Estas en el tema de Cake Php error SQL query en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola gente , sigo batallando con Cake Php y la verdad que me gusta mucho este FW. Me ha surgido un problemilla que por mucho ...
  #1 (permalink)  
Antiguo 25/01/2010, 06:56
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 9 meses
Puntos: 8
Cake Php error SQL query

Hola gente , sigo batallando con Cake Php y la verdad que me gusta mucho este FW. Me ha surgido un problemilla que por mucho que googleo no consigo resolver:

tengo este controlador llamado juegos_controller.php:


Código:
	class JuegosController extends AppController {

	var $name = 'Juegos';
	var $helpers = array('Html', 'Form', 'Form');
	var $uses = array('Juego','User','Movimiento');
	function index() {
		$this->Juego->recursive = 0;
		$this->set('juegos', $this->paginate());
	}

	function ajugar($user_id,$juego_id,$numero_nivel) {
		

	//Buscamos el Nivel Mayor del Juego en cuestión (juego 1 en este caso)
	$nivelMayor=$this->Juego->Nivele->nivelMayor($juego_id);

	 //Comparamos el Nivel Mayor con nuestro nivel para determinar cual es mayor
	 if ($numero_nivel > $nivelMayor['Nivele']['Numero_Nivel'])  {
	  //Poner el estado del jugador a finalizado (4 es el estado finalizado)
				if (!$this->User->activar($user_id,4))
				return false;
		 }
	else //si el $nivelMayor es mayor que nuestro nivel actual ($numero_nivel)
		{
		//calculamos precio inscripción a este nivel
				

		$inscripcion=$this->Juego->precioJuegoNivel($juego_id,$numero_nivel);
		//Descrementamos el saldo_juego de la tabla USERS: Saldojuego= Saldojuego-incripcion
		if (!$this->User->decrementarSaldoJuego($user_id,$inscripcion) )
		return false;
		
		//Hayamos la Id del nivel en el que estamos
		if (!$nivel_id=$this->Juego->Nivele->nivel_id($juego_id,$numero_nivel))
		return false;
		//Insertamos nuestra partida
		if (!$id_partida=$this->User->Partida->partidaInsertar($user_id,$nivel_id))
		return false;
		//Incrementamos en uno el valor del campo numero_jugadores de la tabla NIVELES
		if (!$this->Juego->Nivele->incrementarJugadores($juego_id,$nivel_id))
		return false;
		/*Insertamos una tupla en la tabla de MOVIMIENTOS con los siguientes datos:
		Concepto=”Inscripcion en juego” & juego_id & “en el nivel” & numero_nivel
		Importe= incripcion
		Partida_id=la Partida_id de la tupla anteriormente insertada en la tabla partidas
		Saldado=true */
		$concepto="Inscripción en Juego&". $juego_id."&".$numero_nivel;
		$nivel_datos=$this->Juego->Nivele->niveleDatos($juego_id,$nivel_id);
		if (!$this->Movimiento->insertarMoviento($concepto,$nivel_datos['Nivele']['inscripcion'],
												 $id_partida,$saldado=true))
		return false;
		// Buscar en la tabla JUEGOS el juego_id y obtener el valor del campo posiciones
		$posiciones=$this->Juego->numPosicionesJuego($juego_id);
	    //Si numero_jugadores >posiciones entonces */
		if ($nivel_datos['Nivele']['numero_jugadores'] > $posiciones) {
		
		/*Buscar en la tabla PARTIDAS, aquella cuya partida_id sea el número más pequeño correspondiente al 		          numero_nivel y al juego_id, siempre y cuando el campo finalizado este a false (ahora el users_id será el          correspondiente al de este jugador pues es el promocionado a un nuevo nivel)*/
		$partidaPeq=$this->User->Partida->partidaPeqBuscar($juego_id,$numero_nivel,$user_id);
		
		//Decrementar en un jugador el campo numero_jugadores en uno de la tabla NIVELES
		$decrementarJugadores=$this->Juego->Nivele->decrementarJugadores($juego_id,$nivel_id);
		if (!$decrementarJugadores )
		return false;
		//Poner el campo finalizado=true de la tabla PARTIDAS
		$finalizado=$this->User->Partida->finalizarPartida($partidaPeq);
		//Buscamos en la tabla NIVELES, el premio correspondiente al nivel numero_nivel
		$nivel_datos=$this->Juego->Nivele->niveleDatos($juego_id,$nivel_id);		
		//Incrementamos el saldo_juego= saldo_juego+ premio
		$incrementaSaldo=$this->User->incrementarSaldoJuego($user_id,$nivel_datos['Nivele']['premio']);
		if (!$incrementaSaldo)
		return false;	
		/*Insertamos una tupla en la tabla de MOVIMIENTOS con los siguientes datos:
		  Concepto=”Premio en juego” & juego_id & “en el nivel” & numero_nivel
		 Importe= -premio
		 Partida_id=la Partida_id correspondiente la users_id, en el juego_id en numero_nivel
		Saldado=true */
		$concepto="Premio en juego&". $juego_id."&".$numero_nivel;
		//$nivel_datos=$this->Juego->Nivele->niveleDatos($juego_id,$nivel_id);
		if (!$this->Movimiento->insertarMoviento($concepto,$nivel_datos['Nivele']['premio'],
												 $id_partida,$saldado=true))
		return false;
		
		/*Buscamos en la tabla NIVELES, el aporte_crecimiento que tiene que hacer en el numero_nivel
		  Decrementamos el saldo_juego=saldo_juego- aporte_crecimiento */
		  $aporteCremimiento=$this->User->decrementarSaldoJuego($user_id,$nivel_datos['Nivele']['aporte_crecimiento']);
		  if (!$aporteCremimiento)
		  return false;
		  /*Insertamos una tupla en la tabla de MOVIMIENTOS con los siguientes datos:
		    Concepto=”Aporte a la lista” & juego_id & “en el nivel” & numero_nivel
			Importe= aporte_crecimiento
			Partida_id=la Partida_id correspondiente la users_id, en el juego_id en numero_nivel
			Saldado=true*/
 		 $concepto="Aporte a la lista&". $juego_id."&".$numero_nivel;
		 if (!$this->Movimiento->insertarMoviento($concepto,$nivel_datos['Nivele']['aporte_crecimiento'],
												 $id_partida,$saldado=true))
		return false;
		
		/*Calcular  rentabilidad  (es la suma total del campo rentabilidad para aquellos niveles cuyo 
		 Numero_Nivel<=numero_nivel)*/
		 $rentabilidad=$this->Juego->Nivele->rentabilidadNivel($juego_id,$numero_nivel);
		
		//Incrementamos saldo_efectivo=saldo_efectivo+rendimiento
		$saldoEfectivo=$this->User->IncrementarsaldoEfectivo($user_id,$rentabilidad);
		
		/* Insertamos una tupla en la tabla de MOVIMIENTOS con los siguientes datos:
		   Concepto=”Rendimiento en el ” & juego_id & “en el nivel” & numero_nivel
           Importe - rendimiento
           Partida_id=la Partida_id correspondiente la users_id, en el juego_id en numero_nivel
           Saldado=true 
           Ajugar(jugador_id,juego_id,numero_nivel+1 ) */
		$concepto="Rendimiento en el Juego&". $juego_id."&".$numero_nivel;
		//$nivel_datos=$this->Juego->Nivele->niveleDatos($juego_id,$nivel_id);
		if (!$this->Movimiento->insertarMoviento($concepto,$rentabilidad,
												 $id_partida,$saldado=true))
		return false;
		
		return true;
		}
		
	
		
	}
	return false;
	}

}
Tengo que llamarlo desde otro controlador y lo hago de esta manera:
$this->Juego->ajugar($user_id,1,1);
No entiendo el error porque si llamo a este método directamente de este modo
http://localhost/miweb/juegos/ajugar/1/1/1 funciona perfectamente todo el código que lleva dentro dicho método.
El problema es cuando lo llamo desde este otro controlador que me tira este error:
Código:
Warning (512): SQL Error: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ajugar' at line 1 [CORE\cake\libs\model\datasources\dbo_source.php, line 525]

Code | Context

$sql	=	"ajugar"
$error	=	"1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ajugar' at line 1"
$out	=	null

            $out = null;
            if ($error) {
                trigger_error("<span style = \"color:Red;text-align:left\"><b>SQL Error:</b> {$this->error}</span>", E_USER_WARNING);

DboSource::showQuery() - CORE\cake\libs\model\datasources\dbo_source.php, line 525
DboSource::execute() - CORE\cake\libs\model\datasources\dbo_source.php, line 201
DboSource::fetchAll() - CORE\cake\libs\model\datasources\dbo_source.php, line 336
DboSource::query() - CORE\cake\libs\model\datasources\dbo_source.php, line 297
Model::call__() - CORE\cake\libs\model\model.php, line 441
Overloadable::__call() - CORE\cake\libs\overloadable_php5.php, line 52
Juego::ajugar() - [internal], line ??
MovimientosbancariosController::processTransaction() - APP\controllers\movimientosbancarios_controller.php, line 107
Object::dispatchMethod() - CORE\cake\libs\object.php, line 118
Dispatcher::_invoke() - CORE\cake\dispatcher.php, line 227
Dispatcher::dispatch() - CORE\cake\dispatcher.php, line 194
[main] - APP\webroot\index.php, line 88

Query: ajugar

bool(false)
Haber si a alguien se le ocurre donde puede estar el fallo.
Mil gracias de antemano.
__________________
Videotutoriales de Drupal
  #2 (permalink)  
Antiguo 25/01/2010, 08:44
Avatar de jcxnet  
Fecha de Ingreso: octubre-2005
Ubicación: Perú
Mensajes: 784
Antigüedad: 18 años, 5 meses
Puntos: 56
Respuesta: Cake Php error SQL query

Hola,
la aplicación debe estar estructurada de tal manera que este tipo de llamadas no debrían ocurrir, pero para tu caso puedes usar la función requestAction

__________________
►I'm a devil on the run ♂
Jcxnet.com
*Keep It Simple **
  #3 (permalink)  
Antiguo 25/01/2010, 08:59
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 9 meses
Puntos: 8
Respuesta: Cake Php error SQL query

Cita:
Iniciado por jcxnet Ver Mensaje
Hola,
la aplicación debe estar estructurada de tal manera que este tipo de llamadas no debrían ocurrir, pero para tu caso puedes usar la función requestAction

Gracias por tu respuesta , pero ¿entonces como puedo hacer para que un controlador llame a un método de otro controlador?.
Mil gracias por tu ayuda.
__________________
Videotutoriales de Drupal
  #4 (permalink)  
Antiguo 25/01/2010, 09:04
Avatar de jcxnet  
Fecha de Ingreso: octubre-2005
Ubicación: Perú
Mensajes: 784
Antigüedad: 18 años, 5 meses
Puntos: 56
Respuesta: Cake Php error SQL query

usa la función requestAction para poder hacer ese tipo de llamadas.

__________________
►I'm a devil on the run ♂
Jcxnet.com
*Keep It Simple **
  #5 (permalink)  
Antiguo 25/01/2010, 09:54
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 9 meses
Puntos: 8
Respuesta: Cake Php error SQL query

Cita:
Iniciado por jcxnet Ver Mensaje
usa la función requestAction para poder hacer ese tipo de llamadas.

Ok, ya me funciona con requestAction, pero te preguntaba que porque dices que eso no se debe hacer (o algo parecido te he entendido).
Un saludo y gracias
__________________
Videotutoriales de Drupal
  #6 (permalink)  
Antiguo 25/01/2010, 10:13
Avatar de jcxnet  
Fecha de Ingreso: octubre-2005
Ubicación: Perú
Mensajes: 784
Antigüedad: 18 años, 5 meses
Puntos: 56
Respuesta: Cake Php error SQL query

Así es, las llamadas a funciones entre controladores no deberían ocurrir, para ello ya existen las relaciones entre los modelos.
Saludos,
__________________
►I'm a devil on the run ♂
Jcxnet.com
*Keep It Simple **
  #7 (permalink)  
Antiguo 26/01/2010, 04:08
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 9 meses
Puntos: 8
Respuesta: Cake Php error SQL query

Cita:
Iniciado por jcxnet Ver Mensaje
Así es, las llamadas a funciones entre controladores no deberían ocurrir, para ello ya existen las relaciones entre los modelos.
Saludos,
Ok, mil gracias.
Un saludo
__________________
Videotutoriales de Drupal

Etiquetas: cake, php, query, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:43.