2012年9月4日火曜日

【cakephp】id以外の主キーでアソシエーションしたい時


ちょっとハマったのでメモ書き程度に書いておきます。

二つのモデルを主キー以外でアソシエーションしたいことがあり、いろいろ頑張ってみたものの
どうしても主キーでアソシエーションしようとされるためうまくいかなかった。

いろいろ試してみて、belongsToではなくfindのoptionsで指定すると思い通りに実装できた。

joinsの指定の例は以下の通り。
    $params = array(
        'conditions' => array('検索条件など'),
        'joins' => array(
            0 => array(
                'type' => 'LEFT',
                'table' => 'users',
                'alias' => 'User',
                'conditions' => 'User.username = Example.name,
            ),
        ),
    );

※joinsは2次元配列にしないとうまくいかないので注意!


途中でSQL文を書いてqueryで実行することもやった。
しかし、検索条件を変えたいときに不便だったので断念。。。

ただ、しっかり動くSQL文を書いたおかげでjoinsの指定はすぐ出来たので結果オーライということで!



この方法は回避にしか過ぎない気がするのでちゃんとbelongToでアソシエーションさせる方法も探してみます。

以上です。

2012年8月28日火曜日

久々にバグに悩む。。。

今日は久々にバグにハマりました。

バリデーションを通ってきたデータがなぜか登録されなくなっていて、特にエラー表示もなかったために気がつくのにも時間がかかりました。


数時間試行錯誤を続け、ようやく答えが見つかりました。


原因は入力時に通っていないバリデーションを登録時に通っていたためでした。
bakeでジェネレートした時に付けたバリデーションだったので完全に見落としていました。

ケアレスミスは減らさないといけないと思い知らされた出来事でした。

以上です。

2012年8月6日月曜日

はまり中

新しいプロジェクトの説明を受け、早速作業に取りかかっています。

データベースの定義書は一通り完成し、それに沿ってテーブルを組みました。

今は管理画面のログイン画面を作成しています・・・がそこでハマっています。


前と同じくAuthcomponentを使用してログイン画面を作成しているのですが、今回はログイン時に参照したいテーブルが複数あり、それらを全て参照する方法がわからずハマっています。

$componentsのuserModelをプログラム中で書き換えれば行けるかと思いやってみたものの、参照されるテーブルが変わらず撃沈。。。

方針は間違っていない気がするんだけどなぁ。


ログイン時に参照したいテーブルを一つのテーブルにまとめてしまえば一応回避は出来るけどそれだとテーブルが増えるから良くない気がする。

しっかり解決してスッキリさせたいです!


2012年8月2日木曜日

プロジェクトスタート!

ついにプロジェクトが始まりました!

嬉しい反面、不安もたくさんあります。。。

でも、初のプロジェクトで、自分をアピールできるチャンスだと思うので、しっかり完成させられるように全力で頑張ります!


まずはテーブルの定義から始めます。

今まで組んだことのない大きさになるかもしれませんが、頑張りたいと思います。


以上です。


2012年7月31日火曜日

本番!


今日は昨日に引き続き、作成したプログラムを本番環境に対応させる作業を行いました。

昨日は詰まっていたものの、ようやく想定通りの動作をする様になりました!

今回の不具合の原因はfgetcsv()の引数で指定している一行の長さが小さすぎたことが原因でした。

時間がかかったけれど特定できてよかったです。

後は表示の変更なども一部あり、その対応も行いました。

動作確認も無事に進んでいて後は実際に使って不具合がないことを祈るばかりです。

新しいプロジェクトも動き出すのでより頑張って行こうと思います。

以上です。

ついに本番環境へ!

作っていたプログラムをついに本番環境へアップして動作確認を行いました。

何事もなく動作してくれっ!と思っていたもののやはり不具合はあるようで・・・

昨日はその修正をしようとするも原因が特定できませんでした。

今日はしっかり修正できるように頑張ろうと思います。

以上です。


2012年7月27日金曜日

testの大切さ。

今日も今日とてバグに苦しみました。

一度修正をして、直った!と思っても同じ項目を他の画面で実行したときにエラーが出ていました。

こういったミスはtestの甘さから来ているのかなと思います。
testをしっかり書き込んでいればtestを実行するだけで他の部分に影響がでていないかが一瞬でわかります。testの記述は手間のかかる作業ではあるけれど、書いておけば後々のミスがかなり減らせるのではないかと思いました。

今回、同じ部分に対して何度も修正をすることになり、testの大切さを痛感しました。




また、今回の作業でもっと別の方法があったのではないか?と思う部分があります。
それはバリデーションのエラーメッセージについてです。

一つのバリデーションに対して新規登録の時とインポートの時でメッセージを変えたいことがあり、その方法が何とも面倒な感じになってしまいました。。。

採用したやり方はもう一つバリデーションを書いて変数名を$validate_〇〇みたいにして使用するバリデーションをコントローラーで制御するものです。


使用するバリデーションを変える時はコントローラーで

$this->モデル名->validate = $this->モデル名->validate_〇〇;
と記述すれば変わります。

求める動作はできたものコード量がかなり増えてあんまりよくないと感じています。

スマートな方法があれば教えてください!お願いします。

以上です。











2012年7月26日木曜日

バグ修正。

ここ数日ブログを書くのをすっかり忘れていました。
注意せねば。。。

今日は項目書の修正とプログラムの修正を行いました。

バグがなかなか解消出来ず、思っていた以上に時間を使ってしまいました。

時間を使った分、bedoreValidate()など、今まで使ってこなかったものを使ったりもしたので知識は増えたのではないかと思います。

以上です。






2012年7月20日金曜日

暑かったり 寒かったり

気温の変化が激しすぎて今日は少し風邪気味でした。。。

試験項目書は一度提出したときに大量の追加、修正を抱えて帰ってきました。

実際に自分が書いていたことはバリデーションのことばっかりだったので抜けている項目は多かったです。

レイアウトとか動作が成功した後の確認とか。


今後はこのような項目も抜かさずに書けるように頑張りたいと思います。

来週からはいよいよ試験に入ります。

たくさん項目があるのでさくさく行けるように頑張ります。

以上です。



2012年7月19日木曜日

暑いですねー

最近暑いとしか言っていない気がします。
室内と室外の温度差がすごいので体調管理には気をつけたいと思います。

今日から本格的に検証項目書を書き始めました!

単純な作業なので飽きがくることもあるけど、この作業の途中で問題が見つかったりしているのでしっかり隅々まで検証したいと思います。

以上です。



2012年7月18日水曜日

デザイン終わり!

ようやく作成していたプログラムのデザインの適応が終わりました。

これからは試験項目を列挙していきます。

思いつく限りあげていくとかなりの項目数になりそうです。

単調な作業ですが、大事な作業なので頑張りたいと思います。

以上です。

2012年7月13日金曜日

デザイン中です。

今日は一日中管理ツールのデザインを行っていました。

適応するだけだしさくさく進むかなと思っていたけど全然進まないです。。。

細かい部分を修正したり、レイアウトが崩れたりと問題が結構おきて大変です。

ビューもデザイン用にかなり書き直しました。


難しいけれど自分が作ったプログラムにデザインが組み込まれると楽しくなってきます!


デザインにはtwitter bootstrapを使っていますが、僕みたいにデザインが超苦手な人でもある程度のものが作れるので便利です。

来週もデザインを引き続き行って、検証に入れるように頑張ります。

以上です。



2012年7月9日月曜日

トランザクションが効かない。


今日はインポート機能にバリデーションやトランザクションを加えました、

早速トランザクションでハマりました。


何度試してもトランザクションがかからない。。。
特にエラーが出ていなかったので構文エラーではないし、関数も呼び出せているはず。
そこで、見ていた情報がcake1.3のものだったので、cakeのバージョンの違いによるものだと推測し、
ひたすら調べていました。

しかしながらいつまでたっても答えは見つからず。。。

先輩に訪ねてみた所、エンジンがMyISAMになっていないか?と言われ確認してみると、確かにMyISAMになっていました。
なんとMyISAMはトランザクションをサポートしていないようで、
トランザクションを使う場合にはInnoDBにしなければならないとのことです。
InnoDBにエンジンを変えた所、トランザクションが無事に効くようになりました。


悔しかったのでMyISAMとInnoDBの違いについて調べてみました。

MyISAMの利点と問題点

利点…シンプル、高速に動作、フルテキスト検索に対応
欠点…トランザクションや外部キー制約をサポートしない、クラッシュ時に使えなくなる、テーブルレベルでロックをかけるという点でロックの粒度が荒い

InnoDBの利点と問題点

利点…トランザクションをサポート、外部キー制約が装備されている、クラッシュ時のリカバリに対応、列レベルでロックを実施
欠点…フルテキスト検索ができない、パフォーマンスが悪い


このような違いがあるらしいです。
今後はハマることなく、使い分けが出来るようにしたいと思います。

以上です。

2012年7月6日金曜日

そろそろ梅雨明けですねー

もう明けてるのかな?
最近暖かくなって来ましたね。
だた、朝の電車が冷房強すぎて寒いです。。。


今日は登録画面と修正画面とcsvインポート機能を作成しました。
テストもガシガシ書きました!
そろそろ慣れてきて、開発スピードが上がってきた気がします。


昨日はブログ書き忘れてすいません(汗
この記事を書くときになってようやく気がつきました。
忘れないように気をつけます。。。

以上です。


2012年7月4日水曜日

バリデーションにハマる。。。

今日は削除画面と新規登録画面を作成しました。

削除画面はテストまで順調にすすんだものの、新規登録のバリデーションでつまずきました。

オリジナルの関数を作り、バリデーションをかけようと思ったものの、その関数になかなか入らず、原因も特定できませんでした。


原因はallowEmptyがfalseになっていたことでした。
動作確認の際に何も入力せずに動作確認をしていたため、allowEmptyに引っかかり、関数に入らずに処理が終わっていました。。。


動作確認の方法にも気をつけないとなぁとつくづく思いました。

以上です。

2012年7月3日火曜日

テスト。



今日もTestを書きました。

だいぶ慣れてきたので昨日より早く書けました!

自分ではほとんどのTestパターンを網羅したつもりでも抜けがあったのでしっかり書きたいと思います。

明日からは登録、修正、削除など別の機能の作成に取りかかりたいと思います。

以上です。

2012年7月2日月曜日

もう7月ですねー


今年は雨が少ない気がしますね。
野池の水が減水しないか心配です。


この3ヶ月は本当に早く感じました。
毎日新しいことに取り組んでいるからなのかとても充実しているように思います。


今日はcakephpのTestを書きました。

理論も書き方も完全に理解している訳ではなかったので開始に時間がかかりました。。。
書き始めてからもかなりのエラーに遭遇しました。

その中でもデータは取れているにも関わらず、配列の構成を考えていなかったのは盲点でした。

出力すればすぐわかるのに出力の仕方を探すのも地味に時間を取られました。。。

ただ、こういったことは今回限りにするのでこれからはガシガシTestを書けると思います。

以上です。

2012年6月29日金曜日

ページング


今日はページネーションの修正とその他細部の修正を行いました。

ページネーションはページネーションに使う条件をまとめてsessionで持ち回す形で実装しました。
これにより、ページを切り替えた時も全件表示にならなくなりました。

また初期値を入れたり、ページネーションの条件部分をモデルに移動させるなどの修正を行いました。


最初は別言語だと感じるぐらいだったフレームワークもだいぶなれてきました。

いままで長々と書いていた部分が簡潔に書けるのでコードが見やすくなった気がします。

来週はtestを書いて正しい動作が出来ているかのチェックをして行きたいと思います。

以上です。

2012年6月28日木曜日

ヒューマンエラー。。。

今日は引き続き検索機能を実装しました。

打ち間違いなどの細かいミスにかなり時間をとられました。

フレームワークって融通がきかないと思っていたけど実はしっかり設定すれば自分にやりたいように出来ることもたくさんあることがわかりました。

ヘルパーの見方も少しずつわかってきた気がします。

以上です。

2012年6月27日水曜日

ようやく作業が進んできました!


今日は一覧表示に検索機能を付ける作業を行いました。

検索条件が入力されていないと検索することが出来なかったり、検索後に次のページに行こうとすると全件表示に戻ってしまうなど、まだまだ直す所がたくさんあるものの、ベースは出来上がったと思います

少しずつフレームワークの便利さがわかってきた気がします。

最初は書き方も動作もよくわかっていなかったけどようやく書いてあることの意味が理解できるようになってきました。

まだプログラムを打つのにかなりの時間がかかってしまっているので時間を短縮できるように頑張りたいと思います。

以上です。