FuelPHPでDBにPostgreSQLを使用する場合、DELETE文で LIMIT句 においてエラーが発生する事があります。
これは、コアクラスが勝手に LIMIT 0, 1
を付けてしまうためです。そこで、 コアクラスをオーバーロード して、 LIMIT 0, 1
を付加しないように修正します。
オーバーロード
fuel/app/bootstrap.php
Autoloader::add_classes(array(
// ~~中略~~
// LIMIT制御を外す(拡張クラスのパスは任意です)
'Database_Query_Builder_Delete' => APPPATH.'classes/extensions/core/classes/database/query/builder/delete.php',
'Database_Query_Builder_Update' => APPPATH.'classes/extensions/core/classes/database/query/builder/update.php',
));
拡張クラス
APPPATH.'classes/extension/core/classes/database/query/builder/delete.php'
class Database_Query_Builder_Delete extends \Fuel\Core\Database_Query_Builder_Delete
{
public function compile($db = null)
{
// ~~中略~~
// substr($db->_db_type, 0, 5) !== 'pgsql' を追加
// update.phpにも、同様の追加を行います
if ($this->_limit !== NULL && substr($db->_db_type, 0, 6) !== 'sqlite' && substr($db->_db_type, 0, 5) !== 'pgsql')
{
// Add limiting
$query .= ' LIMIT '.$this->_limit;
}
// ~~中略~~
}
}
備考
- FuelPHPが mysqlを想定 して作られているため、このようなトラブルが発生します
- FuelPHP 2.0では、恐らく修正されてくると思います
- PostgreSQLでは、DELETE文にLIMIT句を使用することが出来ません