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