CakePHP1.2(beta) + MySQL4.0
さくらインターネットのレンタルサーバを使っているのだが。
CakePHP1.2(beta) + MySQL4.0 だと AppModel::del ( AppModel::delete ) がきちんと動作しないっぽい。
CakePHP1.1 だと動いていたのだけど。
そもそも MySQL4.0 はサポート外かもしれないが。
問題のソース。
cake/libs/model/datasources/dbo_source.php。
[php]
function renderStatement($type, $data) {
extract($data);
switch (strtolower($type)) {
case 'select':
return "SELECT {$fields} FROM {$table} {$alias}{$joins} {$conditions} {$order} {$limit}";
break;
case 'update':
return "UPDATE {$table} {$this->alias}{$alias} {$joins} SET {$fields} {$conditions}";
break;
case 'delete':
return "DELETE {$alias} FROM {$table} {$this->alias}{$alias} {$joins} {$conditions}";
break;
}
}
[/php]
DELETE構文の生成に上の関数が呼ばれているのだが、MySQL4.0 だと alias が使えない。。。
ので、scaffold を使っても、delete でエラーが発生する。
ただ、AppModel に以下の関数を追加すれば動作する。
[php]
function del($id=null, $cascade=true) {
if ($id === null) {
return;
}
$this->beforeDelete($cascade);
$sql = sprintf('DELETE FROM %s%s WHERE id=%d',
$this->tablePrefix, $this->table, $id);
$this->query($sql);
$this->afterDelete($cascade);
return true;
}
[/php]
ってか、さくらのレンタルサーバ、いい加減にMySQLバージョンアップしてくれないかな。