CakePHP:pluginのModelで$useTableが効かないバグ?

CakePHP1.2ガイドブック CakePHP1.2ガイドブック

毎日コミュニケーションズ 2009-06-27
売り上げランキング : 51427
おすすめ平均

Amazonで詳しく見る by G-Tools

(訂正)この記事でCakePHPのバグかと勘違いしていましたが、自分の設定ミスでした。
詳しくは、次の日の投稿を参照のこと。

CakePHP1.2.3を使ってたのであるが、プラグインを開発していて(といっても、1.1で開発したやつを1.2に移植してるだけ)、さて動かすかという算段でアクセスしてみたら、

Error: Database table enquetes for model Enquete was not found.

と言われた。このエラーメッセージから、アンケートプラグインを作っていたのがわかるw
それはともかく、Enqueteモデルでは、

<?php
class Enquete extends EnqueteAppModel
{
  var $name = 'Enquete';
  var $useTable = 'enquete'; // テーブル名はenquetesではなく、enqueteなのだ
}
?>

なのである。ただ、俺は掲示板プラグインも作っているのだが、掲示板プラグインではそんな事にはなってない。掲示板プラグインとアンケートプラグインの違いは、掲示板はbbsテーブルのみだが、アンケートは、enquete, enquete_answer_list, enquete_resultという3つのテーブルを使っている事だ。hasManyとかで参照しているModelの$useTableを見てないんじゃないだろうか?

googleで検索してみたら、以下を発見。
https://trac.cakephp.org/ticket/4131
チケット出てるやん。でもcloseされてるみたい。でもその後に、再現するからもう一度テストしろっていう書き込みが見られるが、スルーされてるっぽい。1.2 RC1の頃のチケットだからなぁ…。

CakePHP 1.2.5が出てたのでひょっとしたら直ってるかな〜と思ってcakeディレクトリを上書きしてみたけれど、結果は変わらず。直ってないやん。

なんか面倒だったので、テーブルを複数系にして対応してしまった。
でも、enquete_answer_listsって、リストなのに複数形ってオイ!!と自分で突っ込みたくなる。正直気持ち悪い。まあとりあえずってことで。


PHP: switch文の中でcontinueはbreakと同じ

先日、開発中に、以下と似たようなコードになった。

<?php
  // 削除対象IDの配列
  $delete_ids = array();
  foreach($articles as $article){
    switch($mode){
      case 'delete':
        // 削除モード
        switch($article['category']){
          case 'book':
          case 'music':
            // 本と音楽の記事のみ追加
            array_push($delete_ids, $article['id']);
            break;

          default:
            break;
        }
        break;

      default:
        break;
    }
  }
  // 記事を削除する
  $db->delete($delete_ids);

  $insert_articles = array();
  foreach($articles as $article){
    switch($mode){
      case 'delete':
        switch($article['category']){
          case 'book':
          case 'music':
            // 削除済みなので、インサートしないためにcontinue
            continue;
            break;

          default:
            break;
        }
        break;

      default:
        break;
    }
    array_push($insert_articles, $article);
  }
  // 何故か本と音楽のものまでインサートされる!
  $db->insert($insert_articles);
?>

こうしたら、削除したはずの記事まで復活してしまったという感じ。
うーん、ちょっと例を書くのに失敗したなぁ…。摩訶不思議な仕様のやつだったから、オブラートに包みながらソースを再現させるのが難しい…。

まあそれは置いといて、削除対象は無視してcontinueしてるのに、どうもcontinueされてないのは何故だと。調べてみたところ、switch文中のcontinueはbreakと同じらしい。continueを使いたかったら、continue 2を使えだと…。

PHP:switchの中でcontinue from Side-B

だが、switch文のネスト内でcontinue 2をしてみても、駄目だったので(外のswitch文に制御が戻っただけ?)、フラグを使って対応した。

  // 削除は同じ。インサートのみ変更
  $insert_articles = array();
  foreach($articles as $article){
    $book_music_flg = false;
    switch($mode){
      case 'delete':
        switch($article['category']){
          case 'book':
          case 'music':
            $book_music_flg = true;
            break;

          default:
            break;
        }
        break;

      default:
        break;
    }
    if($book_music_flg){
      continue;  // switch文を抜けてからcontinueしたらOK
    }
    array_push($insert_articles, $article);
  }
  $db->insert($insert_articles);
?>

ちょっとした罠だった。


しまなみ海道ポタ

しまなみ海道にポタに行ってきた。
とはいっても、今治までは車です。BD-1を折り畳んで車に積んでGo!!

12時くらいに到着してみると、なんか異常にチャリダーが多い。しまなみ海道のパンフレットで知ったのだが、今日はサイクルモードのイベントでしまなみを渡るのをしていたようだ。相当数の自転車とすれ違った。

CIMG0335
とりあえず大島に到着!今までしまなみに来ても、自転車道だけしか走ってなかったので、今日は大島を回ってみる事とする。

CIMG0337
大島から見た来島海峡大橋。今まで通ったことのない道から。、長い橋と島々が一望できて、晴れやかな気分になった。

CIMG0343
初めて吉海バラ公園に行った。中央の噴水。

CIMG0344
バラ公園なんだけれど、季節的に微妙なのか、あんまり咲いていない…。枯れ気味のやつとか、結構多かった。

CIMG0346
黄色いバラは綺麗に咲いてた!

CIMG0349
でもバラといえば赤でしょう!

この後、バラソフトクリームを食べた。写真撮るの忘れてた…。
食べるとバラの香りがふわ〜っと香る。

CIMG0351
バラ公園を出発して、いつもの自転車道に合流してしまった。伯方島側に出た。島と島の間だからか、潮の流れが速い。

CIMG0353
伯方島への橋が見えた。今回は渡りませんでした。渡らずに、島を回ります。

CIMG0358
回っていってると、今まで見た事ない風景が。島と海と空が綺麗。

CIMG0364
走り続けていると、急に登坂に。けっこうしんどい。海に太陽が反射して、すごく綺麗だった。島が多い中で水平線が見えるのはなんだか珍しい気がした。
その後走り続けていると、登坂が多いうえに、道が細くなったり、工事中のところとかもあった。うーむこれは思ったよりもきついコースだ。海岸線沿いって、アップダウンが結構多いからな。

CIMG0365
大島は採石場が多いのか、石材店があちこちで目につく。招き猫発見。なんだか癒し系だな〜と思って撮ったのだが、今見てみると、涙流してるみたいじゃないか!?

CIMG0367
気軽に輪行できる折りたたみ自転車でのポタは、
行動範囲が広がって楽しみも増えていいっすね。
また、しまなみ来たいなぁ〜。


BD-1整備したけど

BD-1の整備をした。
フロントハブとリアハブのグリスアップをしたのだが、長い事やってなかったので、かなり汚れてた。俺の手も真っ黒になった。フロントハブは前からだったと思うけど虫食い状態になっているため、ゴリ気味に調整せざるをえない。リアハブはなんとか大丈夫だった。

BBも見てみようと思ったのだが、クランクは外せたのだけれど、BBをうまく外すことができず、諦めた。BBでミスすると全てが終わってしまうので、BBはプロに任せたほうが安心かなと思う。ただ、今日は時間がかかりすぎたので、閉店時間になってしまっていて、行けなかった。来週行くか。どちらにしろ、BBはゴリが出ているような感じがしたから、もう寿命なのかもしれない…。

あと、走っているとカツカツ音がするので、原因を探りたいのだけれど、今のところわからない。こぐのをやめても音が鳴るから、フロントホイールかリアホイールか…。
うーん、フロントっぽいな。


耳勉やってます。

いろんな勉強するのが好きなので、よく本を読んでいますが、結構前からフォレスト出版のCDとか買って、耳勉(耳でする勉強)やってます。通勤中に聞いたりとか、散歩しながら聞いたりとか。なにげにポタリングの最中もずっと聞いてます。まあずっとフォレスト出版のCDしか聞いてなかったのですが、脳が良くなる耳勉強法をブックオフで買って読んでみたら、非常に面白かったので、著者が運営しているFebeでオーディオブック買ってみました。もろに著者の戦略にハマっていますw

今、すごくためになるなぁ〜と思って何度もリピートして聞いているのが、ワタミの会長の渡邉美樹さんのオーディオブックです。志が高くて、このような人になりたいと思ってきます。すごいのが綺麗事を並べているだけではなく実践しているということ。いつも逃げ口上で部下をやる気にさせない誰かさん(おっと!)に聞かせてやりたいくらいです。

耳勉は、時間がなくてもできるし、気になる箇所が読書よりも頭に残りやすいなと思います。まあその分、概念とか思想とか、そういう本が多くなりますけど、そういう本って心にパワーをくれますね!Febeだとmp3でダウンロード販売なので、すぐに聞ける上に、そんなに高くないので(本と同じくらいの値段)、手頃です。iTunesでもオーディオブック買うこともできますけど、種類が少ないというか、検索しづらいというか…。

フォレスト出版のCDもいいです。自分的には小阪 裕司さんの「仕事心にスイッチを!」のCDがオススメです。チーム作りのノウハウや、抵抗勢力などについても言及されてて、本当にタメになります。自分が昔アルバイトをしていた職場の方とか、聞いたらいいのではないかと強く思います。

あの神田昌典さんの超人気CDがもらえる、フォレスト出版リーダーズクラブはこちら