FK-less relations

Is there a way to allow AR to work with MySQL MyISAM, that is without FK constraints? According to the documentation this is possible with SQLite.


Tip: For SQLite database, we may create tables that define the foreign key constraints such as the example below. However, these constraints are NOT enforced by the SQLite database itself.


This is not supported. The Guide about SQLite says you need to define the FK constraints, but they are not enforced by SQLite.

I believe an option for locking down the model to a development config would solve my problem since I have InnoDB installed. Current web hotel of choice don't support InnoDB.

Here's my suggested workaround (one line replaced in CMysqlSchema.php):


	protected function findConstraints($table)


		//$row=$this->getDbConnection()->createCommand('SHOW CREATE TABLE '.$table->rawName)->queryRow();

		$row=array(file_get_contents(dirname(__FILE__).'/'.str_replace('`','',$table->rawName).'.sql', FILE_TEXT));


		$regexp='/FOREIGN KEYs+(([^)]+))s+REFERENCESs+([^(^s]+)s*(([^)]+))/mi';

		foreach($row as $sql)





The files are standard phpMyAdmin table dumps. Had to use file_get_contents() instead of file(), obviously because SHOW CREATE TABLE returns multiple FK declarations on the same line (causing exit from the foreach loop).


I am afraid this workaround is not appropriate to be used in the framework. It is inefficient (file operation) and requires specific file locations.

If there is a bug with the SHOW CREATE TABLE approach, could you please report and we will see how to solve it.

I completely agree. Have to admit I hadn't yet thought about performance. I can imagine the files should be preloaded instead.

Also, I posted this just in case somebody else has the same situation (uses relations, want to take advance of AR, but myISAM-only hosting available).

Possibly referential checks has to be added to the CUD actions, thats what I'm going to have a look at next, now that I know I won't end up with an Yii exception due to stripped away FK declarations on deploying the database.