Hi,
I try to generate crud methods from the quickstart docs: http://www.yiiframework.com/doc/guide/quickstart.first-app but it fails complaining
about missing primary key.
First I created the table "tbl_user" from the mysql example.
Then in the yiic shell:
model User tbl_user
crud User
Fails with the error : "Error: Table "tbl_user" does not have a primary key."
My table looks like this:
mysql> describe tbl_user ;
±---------±-------------±-----±----±--------±---------------+
| Field | Type | Null | Key | Default | Extra |
±---------±-------------±-----±----±--------±---------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(128) | NO | | NULL | |
| password | varchar(128) | NO | | NULL | |
| email | varchar(128) | NO | | NULL | |
php version is 5.2.8 and mysql version is 5.1.45
Any ideas ?
thanks ,
ola
mech7
(Chris De Kok)
April 11, 2010, 3:01pm
2
You need to set the id as a primary key (with auto increment)
I created the table primary key , and autoincrement:
CREATE TABLE tbl_user (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
username VARCHAR(128) NOT NULL,
password VARCHAR(128) NOT NULL,
email VARCHAR(128) NOT NULL
);
In the CrudCommand.php class, the primary key is null:
public function generateController($source,$params)
{
list($controllerClass,$modelClass)=$params;
$model=CActiveRecord::model($modelClass);
$id=$model->tableSchema->primaryKey;
// ---------------------------------
// This code fails throws exception:
// ---------------------------------
if($id===null)
throw new ShellException(Yii::t('yii','Error: Table "{table}" does not have a primary key.',array('{table}'=>$model->tableName())));
ola
Tried to debug some more: Wrote a small test to retreive metadata from the primary key, and can’t see anything wrong:
$DB = new PDO("mysql:host=$hostname;dbname=mytestdatabase", $username, $password);
$select = $DB->query('SELECT id FROM tbl_user');
$meta = $select->getColumnMeta(0);
var_dump ( $meta);
Output is
array(7) {
["native_type"]=>
string(4) "LONG"
["flags"]=>
array(2) {
[0]=>
string(<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='8)' /> "not_null"
[1]=>
string(11) "primary_key"
}
["table"]=>
string( “tbl_user”
["name"]=>
string(2) "id"
["len"]=>
int(11)
["precision"]=>
int(0)
["pdo_type"]=>
int(2)
}
qiang
(Qiang Xue)
April 12, 2010, 6:07pm
5
That’s very strange. Could you execute SQL “SHOW COLUMNS FROM tbl_user” and see the results?
Could you also exit the "yiic shell" and re-enter it to generate the model class?
Hi,
I’m using mysq:
mysql> desc tbl_user ;
±---------±-------------±-----±----±--------±---------------+
| Field | Type | Null | Key | Default | Extra |
±---------±-------------±-----±----±--------±---------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(128) | NO | | NULL | |
| password | varchar(128) | NO | | NULL | |
| email | varchar(128) | NO | | NULL | |
±---------±-------------±-----±----±--------±---------------+
ola
zoomy
(Zahidzoomy)
April 26, 2010, 5:13am
8
Hi,
I try to generate crud methods from the quickstart docs: http://www.yiiframework.com/doc/guide/quickstart.first-app but it fails complaining
about missing primary key.
First I created the table "tbl_user" from the mysql example.
Then in the yiic shell:
model User tbl_user
crud User
Fails with the error : "Error: Table "tbl_user" does not have a primary key."
My table looks like this:
mysql> describe tbl_user ;
±---------±-------------±-----±----±--------±---------------+
| Field | Type | Null | Key | Default | Extra |
±---------±-------------±-----±----±--------±---------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(128) | NO | | NULL | |
| password | varchar(128) | NO | | NULL | |
| email | varchar(128) | NO | | NULL | |
php version is 5.2.8 and mysql version is 5.1.45
Any ideas ?
thanks ,
ola
Dear use crud tbl_user instead of crud user, look on your data base table that how it is defined in database, your crud query depend on your table name.
I kind of get it to work with just using the table name:
model tbl_user
crud tbl_user
but the app blows up when i try to create a new user. And it also require me to type the auto increment id in the create user form wich
is not correct.
PHP Error
Description
Cannot modify header information - headers already sent by (output started at /usr/local/yii/framework/db/ar/CActiveRecord.php:327)