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_〇〇;
と記述すれば変わります。

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

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

以上です。