CakePHP在两个表中查找匹配的记录

时间:2011-12-30 14:42:40

标签: php cakephp

我有两个表:用户和个人资料。用户可能拥有个人资料,个人资料必须拥有用户!

表格是:

用户: ID 用户名 电子邮件 密码

配置文件: 名字 姓 性别 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个人资料,因为用户可能没有个人资料。例如管理员帐户

资料:

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

    var $belongsTo = 'User';
}

这是我的观点:

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

但需要一些指导才能使其正确。根据CakePHP 2.0的书,我可以做类似的事情:$this->User-Profile->但我不完全理解它或如何在这里使用它?

例如这是否正确:

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

由于

1 个答案:

答案 0 :(得分:1)

根据您的路线,您将使用ProfilesController中的“用户”模型。要使其正常工作,您应该在class ProfilesController extends Controller以下行后添加:

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

然后你直接得到这样的用户模型:

$this->User->...

我可能错了,但我认为你不可能做$this->Profile->User

[编辑:]

在讨论之后,看起来用户模型应该真的有$hasOne='Profile';

因为它不强制执行配置文件,但只是从数据库中获取它(如果它存在)。