Hello,
For example, I have this model relationship:
CREATE TABLE `users` (
`userId` int(10) unsigned NOT NULL AUTO_INCREMENT,
`userName` varchar(16) CHARACTER SET utf8 DEFAULT NULL,
`status` tinyint(4) DEFAULT '1',
PRIMARY KEY (`userId`)
) ENGINE=InnoDB
and
CREATE TABLE `products` (
`prId` int(10) unsigned NOT NULL AUTO_INCREMENT,
`prCode` varchar(15) DEFAULT NULL,
`prName` varchar(50) DEFAULT NULL,
`prCreated` datetime DEFAULT NULL,
`prCreatedBy` int(10) unsigned NOT NULL,
`prModified` datetime DEFAULT NULL,
`prModifiedBy` int(10) unsigned DEFAULT NULL,
`prStatus` tinyint(4) DEFAULT '1',
PRIMARY KEY (`prId`),
KEY `prCreatedBy` (`prCreatedBy`),
KEY `prModifiedBy` (`prModifiedBy`),
CONSTRAINT `products_ibfk_1` FOREIGN KEY (`prCreatedBy`) REFERENCES `users` (`userId`),
CONSTRAINT `products_ibfk_2` FOREIGN KEY (`prModifiedBy`) REFERENCES `users` (`userId`)
) ENGINE=InnoDB
I used the phalcon developer tool to generate the models on my app with foreign key option so that the initialize method of Products model have:
$this->belongsTo("prCreatedBy", "TBI\Models\Users", "userId", array("foreignKey"=>true,"alias"=>'UsersCreated'));
$this->belongsTo("prModifiedBy", "TBI\Models\Users", "userId", array("foreignKey"=>true,"alias"=>'UsersModified'));
The problem is that when I try saving new product contain data of:
...
prCreatedBy = 1;
prModifiedBy = null;
//it's common sense to have the user id of creator and empty user id of modifier user on newly created row, right?
I keep getting this error:
Value of field "prModifiedBy" does not exist on referenced table
I tried using value of new RawValue("NULL")
, but no luck.
It seems that the ORM require the fk value to be not NULL
since by using value of 1 (or any existing users), it works.
However, --as you might know-- inserting directly into MySQL is working just fine. Is this a bug or is there something I missed?
*As a quick workaround, I just removed the foreignKey parameter on the model initialization and handle any MySQL exception
Thanks,
Iman