2011-12-30 14 views
0

私は2つのテーブルを持っています:ユーザとプロファイル。ユーザーにはプロファイルがあり、プロファイルにはユーザーが必要です。CakePHPは2つのテーブルに一致するレコードを見つける

テーブルは以下のとおりです。

ユーザー: ID 名 メール パスワード

プロファイル: FIRSTNAME 姓 性別 DOB

よう のuser_id user_idキーを使用してプロファイルテーブルのリンクを表示することができます

そのユーザーのユーザー名に基づいてプロファイルを表示するにはどうすればよいですか?

それは両方のテーブルから情報を引き出すために必要として...これまでのところ私が持っている:

public function view ($username) 
{ 
    $profile = $this->Profile->find('first', array(
       'conditions' => array('User.username' => $username) 
      )); 

    if (empty($profile)) 
    { 
     $this->cakeError('error404'); 
    } 

    $this->set(compact('profile')); 
} 

、これはそれのためのルートである。また、ここで

Router::connect('/people/:userName',array('controller'=>'profiles','action'=>'view'), 
    array(
     'userName'=>'[A-Za-z0-9\._-]+', 
     'pass'=>array('userName') 
    ) 
); 

は、モデルは以下のとおりです。

ユーザー:

class User extends AppModel 
{ 
    var $name = 'User'; 
} 

ユーザーがプロファイルを持っていない可能性があるため、ユーザーhasOneプロファイルを指定していません。例えば、管理者アカウント

プロフィール:

<h1><?php echo $profile['Profile']['firstname']; ?> <?php echo $profile['Profile']['lastname']; ?></h1>

しかし、それが正しい取得するには、いくつかのステアが必要です

class Profile extends AppModel 
{ 
    var $name = 'Profile'; 

    var $belongsTo = 'User'; 
} 

、ここでは、私の見解です。 CakePHP 2.0の本によれば、私は何かのようにすることができます:$this->User-Profile->しかし、私はそれを完全に理解していないか、ここでそれをどう使うことができますか?

たとえばこれが正しいだろう。

$profile = $this->Profile->User->find('first', array( 'conditions' => array('User.username' => $username) ));

おかげで、あなたのルートによると

+1

は '$ hasOne'関係を設定します。それはあなたがプロフィールを持っている必要があることを意味するわけではありませんが、あなたは* 1つの*プロフィールだけを持つことができます。 ($ this-> User-> Profile') – Ross

答えて

1

、あなたはProfilesControllerから「ユーザー」モデルを使用しようとしています。これが機能するためには、あなたがclass ProfilesController extends Controller後に次の行を追加する必要があります

public $uses = array('User','Profile');

その後、あなたは、このようなユーザモデルを直接取得:

$this->User->...

は私が間違っていることが、私も

:[EDIT]あなたはおそらく $this->Profile->User

を行うことができないと思います

これを議論した後、プロファイルを適用するが、ちょうどそれが今まで存在している場合は、データベースからそれを得ることはありませんのでユーザーモデルが本当に$hasOne='Profile';

を持つ必要があります表示されます。

+0

これは私の見解では、私はエラーが表示されます: '未定義インデックス:プロファイル[APP/View/Profiles/view.ctp、私のビューコードを掲載しました – Cameron

+0

@Cameronインデックスは変更されているので大丈夫です。ちょうど 'デバッグ($データ)'とそれに応じてあなたのビューを修正する –

+0

申し訳ありませんが私に従ってください。インデックスの問題は何ですか? – Cameron

関連する問題