CakePHPにおけるモデル内での$validateに関する質問です。


Entryテーブルに情報を登録する際にUserテーブルに登録済みのメールアドレスを受け付けないようにvalidateの設定を
※本来は「isUnique」を使いたいのですがそれだとEntryでの重複を避けるようになるため。

↓↓↓ココカラ↓↓↓

class Entry extends AppModel
{
 var $name = 'Entry';
 var $validate = array('username' => array('rule' => 'emailUnique'));

 function emailUnique(){
  $result = $this->User->findByUsername($data['Entry']['email']);
  if(!empty($result)){
   return false;
  }else{
   return true;
  }
 }

}

↑↑↑ココマデ↑↑↑

としたのですが、

※長いのでコメント欄に続きます。

回答の条件
  • URL必須
  • 1人2回まで
  • 13歳以上
  • 登録:2010/02/23 20:43:22
  • 終了:2010/03/02 20:45:02

回答(0件)

回答はまだありません

  • id:gelgelgel
    ※以下続きです。

    ↓↓↓ココカラ↓↓↓

    Notice (8): Undefined property: Entry::$User [APP/models/entry.php, line 8]

    Fatal error: Call to a member function findByUsername() on a non-object in /home/xxxx/.data/app/models/entry.php on line 8

    ↑↑↑ココマデ↑↑↑

    というエラーが表示されうまくいきません。「findBy」自体がModelの中では使えない?ためにエラーが表示されているようなのですが、購入した参考書を見ると「Model::findBy」としてモデルの項目内に使い方の解説が載っています。

    実際にコントローラ内に「findBy」を使って重複したメールアドレスを登録できないようにはできたのですが、上記の参考書の件もありあまりいいやり方ではないように思われます。

    Model内に「findBy」を使用して重複したアドレスを登録できないようにするにはどうすれば良いのでしょうか?ご教授のほど宜しくお願い致します。
  • id:zero-uhura
    $Userすなわち、 $this->Userが定義されていない(Undefined property)からでわ。

    >|php|
    <?php

    App::import('Model', 'User');

    class Entry extends AppModel
    {
    var $User;

    ...

    function emailUnique(){
    $this->User = new User();
    ...
    ||<

    あとは、詳しい方お願いします。

  • id:gelgelgel
    zero-uhuraさん

    ご回答ありがとうございます。
    ご指摘の通り修正したところきちんと動作致しました!!

    追加して頂いた部分の根本的な考え方が抜けていたようで、
    今一度初歩から見直してまいります。

    ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません