Problemas de principiante: tabla User

Muy buenas a todos,

Soy nuevo en Yii. Es más, me encuentro haciendo el tutorial de la primera aplicación.

Y es aquí donde ya me he encontrado un problema :S

Yo voy siguiendo todos los pasos que me indica el tutorial:

  • Creo mi directorio con las carpetas necesarias mediante yiic webapp

  • Comento la linea de sqlite y descomento la de mysql (porque trabajo con mysql)

  • Creo la tabla en mi base de datos

  • Y en el paso de usar "yiic shell" es donde viene el problema…

Lo que ocurre es que me dice que la tabla User no existe. Pero yo la acabo de crear.

En un principio pensé que sería porque la tabla que le había indicado estaba en mi servidor y yo estaba trabajando en mi ordenador (para luego subirlo).

Así que puse en marcha XAMPP y me generé la tabla en local (Y empecé todo desde 0, borrando los archivos, para que no me diese algún fallo relacionado con eso).

Pero me ocurrió exactamente lo mismo. En el paso de lanzar yiic shell me da el fallo.

Exactamente lo que ocurre es esto:

  • Yo pongo en el terminal, desde carpetacreadaconyiic/protected/ pongo ./yiic shell config/main.php (lo hago así porque trabajo con mac)

  • El programa se queda a la espera de que le indique que quiero hacer

  • introduzco "model User"

  • Y me indica que los archivos se han creado, pero con una advertencia que me dice que en realidad la tabla User no existe en mi base de datos

  • Si ahora introduzco "crud shell" me da fallos relacionados con las funciones que tiene que ejecutar, supongo que porque éstas no estarán bien creadas en los archivos que se acababan de crear.

Así que, por favor, alguien me puede decir que estoy haciendo mal??

Tengo que seguir pasos distintos en la configuración de la base de datos??

La base de datos tiene que estar creada de alguna manera especial y yo no me he enterado??

Tiene que venir Harry Potter y tocar mi mac con su varita para que la magia lo inunde todo, llenando de color y alegría mi vida??

Por favor una respuesta que me ayude Y_Y

Gracias!

Ya probaste utilizando gii ?

o_OU

Pueeees… no.

Más que nada porque no se lo que es. ?_?

Pero ahora busco información y me pongo a ello.

Cuando tenga algo claro lo hago saber.

Gracias!

Ahora ya lo he probado.

Y me ocurre lo siguiente:

He hecho los cambios que tenía que hacer en el archivo main.php del config.

Una vez dentro he entrado en la sección para hacer módulos. He puesto la tabla. Y me ha dicho que no existía.

Lo peor no es eso. Lo peor es que para cuando he querido volver a entrar (porque me he deslogueado y he salido, para modificar archivos y probar otras cosas) ya no lo he vuelto a conseguir. Me refiero a que, aunque ponga la dirección




/localhost/Freshware/yii/demos/testdrive/index.php?r=gii



, que es mi directorio local donde esta el proyecto, se me queda la página de




/localhost/Freshware/yii/demos/testdrive/.



He activado el log para ver que me decía… pero no me entero de nada:




23:47:37.823385 	trace 	system.CModule 	


Loading "log" application component

in

/Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/demos/testdrive/index.php

(13)


23:47:37.825155 	trace 	system.CModule 	


Loading "request" application component

in

/Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/demos/testdrive/index.php

(13)


23:47:37.826977 	trace 	system.CModule 	


Loading "urlManager" application component

in

/Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/demos/testdrive/index.php

(13)


23:47:37.836452 	trace 	system.CModule 	


Loading "widgetFactory" application component

in

/Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/demos/testdrive/protected/views/layouts/column1.php

(1)

in

/Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/demos/testdrive/protected/controllers/SiteController.php

(32)

in

/Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/demos/testdrive/index.php

(13)


23:47:37.838193 	trace 	system.CModule 	


Loading "user" application component

in

/Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/demos/testdrive/protected/views/layouts/main.php

(34)

in

/Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/demos/testdrive/protected/views/layouts/column1.php

(7)

in

/Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/demos/testdrive/protected/controllers/SiteController.php

(32)


23:47:37.839711 	trace 	system.CModule 	


Loading "session" application component

in

/Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/demos/testdrive/protected/views/layouts/main.php

(34)

in

/Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/demos/testdrive/protected/views/layouts/column1.php

(7)

in

/Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/demos/testdrive/protected/controllers/SiteController.php

(32)


23:47:37.842398 	trace 	system.CModule 	


Loading "clientScript" application component

in

/Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/demos/testdrive/protected/controllers/SiteController.php

(32)

in

/Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/demos/testdrive/index.php

(13)



Por si acaso os pongo también el código del archivo main.php, por si he puesto algo mal:




<?php


// uncomment the following to define a path alias

// Yii::setPathOfAlias('local','path/to/local-folder');


// This is the main Web application configuration. Any writable

// CWebApplication properties can be configured here.

return array(

	'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',

	'name'=>'My Web Application',


	// preloading 'log' component

	'preload'=>array('log'),


	// autoloading model and component classes

	'import'=>array(

		'application.models.*',

		'application.components.*',

	),


	'modules'=>array(

		// uncomment the following to enable the Gii tool

		/*

		*/

		'gii'=>array(

			'class'=>'system.gii.GiiModule',

			'password'=>'abc123',

		 	// If removed, Gii defaults to localhost only. Edit carefully to taste.

			'ipFilters'=>array('127.0.0.1','::1'),

		),

	),


	// application components

	'components'=>array(

		'user'=>array(

			// enable cookie-based authentication

			'allowAutoLogin'=>true,

		),

		// uncomment the following to enable URLs in path-format

		/**/

		'urlManager'=>array(

			'urlFormat'=>'path',

			'rules'=>array(

				'<controller:\w+>/<id:\d+>'=>'<controller>/view',

				'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',

				'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',

			),

		),

		// uncomment the following to use a MySQL database

		/*

		

		'db'=>array(

			'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',

		),

		*/

		'db'=>array(

			'connectionString' => 'mysql:host=localhost;dbname=test',

			'emulatePrepare' => true,

			'username' => 'root',

			'password' => '',

			'charset' => 'utf8',

		),

		'errorHandler'=>array(

			// use 'site/error' action to display errors

            'errorAction'=>'site/error',

        ),

		'log'=>array(

			'class'=>'CLogRouter',

			'routes'=>array(

				array(

					'class'=>'CFileLogRoute',

					'levels'=>'error, warning',

				),

				// uncomment the following to show log messages on web pages

				/*

				*/

				array(

					'class'=>'CWebLogRoute',

				),

			),

		),

	),


	// application-level parameters that can be accessed

	// using Yii::app()->params['paramName']

	'params'=>array(

		// this is used in contact page

		'adminEmail'=>'webmaster@example.com',

	),

);



A ver si alguien me puede ayudar, please!

Muchas gracias!!

Supongo que te refieres a los modelos … no a los modulos cuando dices que escribes el nombre de la tabla…

mmm, esto ya me habia ocurrido antes y lo solucione escribiendo el nombre del esquema antes de la tabla… por ej:

Base D: prueba

Tabla: tb_logs

Entonces desde la creacion de modelos donde escribes la tabla… podrias algo como


prueba.tb_logs

Ahora no debe ocurrir ningun error, ni decir que la tabla no la encuentra…

Tambien otra cosa que debes de revisar y tomar en cuenta es que el usuario que utilizas debe de tener todos los privilegios sobre esa nueva base de datos que has creado.

Sigo intentándolo, pero nada.

Cada vez estoy más perdido.

Ha llegado un punto en el que ni si quiera puedo ejecutar "model User"…

No paraba de darme este fallo:





Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock) in /Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/framework/db/CDbConnection.php on line 405

exception 'CDbException' with message 'CDbConnection failed to open the DB connection: SQLSTATE[HY000] [2002] No such file or directory' in /Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/framework/db/CDbConnection.php:364

Stack trace:

#0 /Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/framework/db/CDbConnection.php(313): CDbConnection->open()

#1 /Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/framework/db/CDbConnection.php(291): CDbConnection->setActive(true)

#2 /Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/framework/base/CModule.php(372): CDbConnection->init()

#3 /Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/framework/base/CApplication.php(429): CModule->getComponent('db')

#4 /Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/framework/cli/commands/shell/ModelCommand.php(260): CApplication->getDb()

#5 /Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/framework/cli/commands/ShellCommand.php(147): ModelCommand->run(Array)

#6 /Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/framework/cli/commands/ShellCommand.php(99): ShellCommand->runShell()

#7 /Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/framework/console/CConsoleCommandRunner.php(63): ShellCommand->run(Array)

#8 /Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/framework/console/CConsoleApplication.php(88): CConsoleCommandRunner->run(Array)

#9 /Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/framework/base/CApplication.php(158): CConsoleApplication->processRequest()

#10 /Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/framework/yiic.php(33): CApplication->run()

#11 /Applications/XAMPP/xamppfiles/htdocs/Freshware/yii/framework/yiic(15): require_once('/Applications/X...')

#12 {main}



He llegado a desinstalar XAMPP.

He instalado MAMP. Con el que desde el terminal he conseguido el mismo fallo…

Aunque también he conseguido, al menos, poder acceder desde gii.

Pero cuando he pinchado en el link para model me ha salido esto:




CDbException


CDbConnection failed to open the DB connection: SQLSTATE[28000] [1045] Access denied for user 'prueba'@'localhost' (using password: YES)


/Applications/MAMP/htdocs/Freshware/yii/framework/gii/generators/model/ModelCode.php(54)


42         ));

43     }

44 

45     public function requiredTemplates()

46     {

47         return array(

48             'model.php',

49         );

50     }

51 

52     public function init()

53     {

54         if(Yii::app()->db===null)

55             throw new CHttpException(500,'An active "db" connection is required to run this generator.');

56         $this->tablePrefix=Yii::app()->db->tablePrefix;

57         parent::init();

58     }

59 

60     public function prepare()

61     {

62         if(($pos=strrpos($this->tableName,'.'))!==false)

63         {

64             $schema=substr($this->tableName,0,$pos);

65             $tableName=substr($this->tableName,$pos+1);

66         }


Stack Trace

#0 	

+

 /Applications/MAMP/htdocs/Freshware/yii/framework/db/CDbConnection.php(313): CDbConnection->open()

#1 	

+

 /Applications/MAMP/htdocs/Freshware/yii/framework/db/CDbConnection.php(291): CDbConnection->setActive(true)

#2 	

+

 /Applications/MAMP/htdocs/Freshware/yii/framework/base/CModule.php(372): CDbConnection->init()

#3 	

+

 /Applications/MAMP/htdocs/Freshware/yii/framework/base/CModule.php(86): CModule->getComponent("db")

#4 	

+

 /Applications/MAMP/htdocs/Freshware/yii/framework/gii/generators/model/ModelCode.php(54): CModule->__get("db")

#5 	

+

 /Applications/MAMP/htdocs/Freshware/yii/framework/web/CFormModel.php(40): ModelCode->init()

#6 	

+

 /Applications/MAMP/htdocs/Freshware/yii/framework/gii/CCodeGenerator.php(149): CFormModel->__construct()

#7 	

+

 /Applications/MAMP/htdocs/Freshware/yii/framework/gii/CCodeGenerator.php(61): CCodeGenerator->prepare()

#8 	

+

 /Applications/MAMP/htdocs/Freshware/yii/framework/web/actions/CInlineAction.php(50): CCodeGenerator->actionIndex()

#9 	

+

 /Applications/MAMP/htdocs/Freshware/yii/framework/web/CController.php(300): CInlineAction->runWithParams(array("r" => "gii/model"))

#10 	

+

 /Applications/MAMP/htdocs/Freshware/yii/framework/web/CController.php(278): CController->runAction(CInlineAction)

#11 	

+

 /Applications/MAMP/htdocs/Freshware/yii/framework/web/CController.php(257): CController->runActionWithFilters(CInlineAction, array())

#12 	

+

 /Applications/MAMP/htdocs/Freshware/yii/framework/web/CWebApplication.php(277): CController->run("")

#13 	

+

 /Applications/MAMP/htdocs/Freshware/yii/framework/web/CWebApplication.php(136): CWebApplication->runController("gii/model")

#14 	

+

 /Applications/MAMP/htdocs/Freshware/yii/framework/base/CApplication.php(158): CWebApplication->processRequest()

#15 	

–

 /Applications/MAMP/htdocs/Freshware/prueba/web/index.php(13): CApplication->run()


08 defined('YII_DEBUG') or define('YII_DEBUG',true);

09 // specify how many levels of call stack should be shown in each log message

10 defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);

11 

12 require_once($yii);

13 Yii::createWebApplication($config)->run();



No creo que esto sea tan difícil… a saber que estoy haciendo mal!!!

Espera… estas usando mac cierto ??

porque el problema es porque falta agregar a la conexion la ruta del archivo socket de mysql… desconozco donde lo hayas instalado, pero quizas encuentres el archivo en "/Applications/MAMP/tmp/mysql/mysql.sock"


'connectionString' => 'mysql:host=localhost;dbname=test;unix_socket:/Applications/MAMP/tmp/mysql/mysql.sock',

Exacto!!

Venía a ponerlo cuando he visto tu respuesta.

Pero muchas gracias!

El tema es que ahora quiero probar a ve si me funciona con XAMPP, y aquí la ruta es distina. No existe la carpeta tmp.

Sabrías decirme a que carpeta tengo que dirigirlo??

De todos modos MUCHAS GRACIAS Jack Fiallos!! Has estado ahí, como un jabato!! ;D

mm… no estoy seguro de acertar porque no uso xampp desde hace mucho tiempo… pero si es la misma estructura de carpetas… podria ser la ruta


/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock 

O algo asi…

Suerte

‘db’=>array(

                    'connectionString' =&gt; 'mysql:host=localhost;dbname=test',


                    'emulatePrepare' =&gt; true,


                  [b]  'username' =&gt; 'root',[/b]


                 [b]   'password' =&gt; '',[/b]


                    'charset' =&gt; 'utf8',


            ),

En esta parte veo que te falta la contraseña de mysql, quizas sea por eso que no te deja acceder, debes de ponerle una :o

Para realizar la instalación paso a paso recomiendo estos videos, excelentes y fáciles de entender. Saludos

Gracias Gustalh, grandes tus videos! Recomendado. Llevaba tres días dándole vueltas al yii y no acababa de entenderlo todo. Ahora, tan sólo viendo tres videos, comprendo mucho más.

Muchas gracias, de verdad.