从两个与CakePhp中的外键关联的表中检索数据

时间:2013-01-25 07:16:58

标签: mysql cakephp join inner-join

我有两个名为login和userDetail的表

                        Login

                        login_id
                        uname
                        pswd
                        userdetail_id

                       userdetails

                          userdetail_id
                          name
                          address
                          email

登录表包含userDetail表中的userdetails_id。我想从Login表和userDetail表中获取所有数据并将其保存到变量中 如果有人知道,请回答我......

3 个答案:

答案 0 :(得分:4)

首先,您的表结构必须如下所示。

logins Table.
  Id auto_increment
  username
  password
userDetails Table.
  Id auto_increment
  user_id
  name
  address
  etc...

现在每个表的模型都是。

<强>登录

<?php
class Login extends AppModel
{
    var $name = 'User';

    var $hasMany = array
    (
        'UserDetail' => array
        (
            'className' => 'UserDetail',
            'foreignKey' => 'user_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
}
?>

<强> UserDetail

<?php
class UserDetail extends AppModel
{
    var $name = 'UserDetail';

    var $belongsTo = array
    (
        'User' => array
        (
            'className' => 'User',
            'foreignKey' => 'user_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => ''
        )
}
?>

最后在控制器中,您需要获取登录详细信息。

$login_detail = $this->Login->find('all');

您将在结果$login_detail中看到userDetail表记录。 在控制器中使用

pr($login_detail);
来查看它的实际效果。

干杯。 随意问。

答案 1 :(得分:2)

确保已启用ContainableBehavior。之后,您可以使用以下查询:

$login = $this->Login->find('first', array(
    'contain' => array(
        'Userdetail.userdetail_id'
        'Userdetail.name',
        'Userdetail.address',
        'Userdetail.email'
    ),
    'fields' => array(
        'Login.login_id'
        'Login.uname',
        'Login.pswd'
    ),
    'conditions' => array(
        'Login.login_id' => 1
    )
));

答案 2 :(得分:-1)

此任务的查询将是:

SELECT Login.*, name,address,email
        FROM Login JOIN userdetails
        ON Login.userdetail_id=userdetails.userdetail_id

可以通过在cakephp中循环来将此查询的结果保存到变量中。