2014-09-26 78 views
1

我有兩個表:CakePHP的hasone屬於聯接不工作

  • 用戶包含(ID,姓名,電子郵件)id是主鍵。

  • users_details包含(USER_ID,地址,城市,郵編)user_id是外鍵的用戶表。

users.id=users_details.user_id

我寫了這樣的用戶模型中user.php的

class User extends AppModel { 

public $name = 'User'; 
public $displayField = 'name'; 
    public $primaryKey = 'id'; 
    var $belongsTo = 'UsersDetail'; 
    public $hasone = array(
    'UsersDetail' => array(
     'className' => 'UsersDetail',   
     'conditions' => '', 
     'fields' => '', 
        'foreignKey' => 'id', 
     'order' => '', 
        'dependent' => true 
    ) 
); 
} 

我寫的usersdetail模型UsersDetail.php

class UsersDetail extends AppModel { 

public $name = 'UsersDetail'; 
public $displayField = 'name';   

    public $belongsTo = array('User' => 
     array('className' => 'User','foreignKey' => 'user_id')); 

    public $hasone = array(
    'User' => array(
     'className' => 'User',   
     'conditions' => '', 
     'fields' => '', 
        'foreignKey' => 'id', 
     'order' => '', 
        'dependent' => true 
    )); 
} 

我想用從表中獲取數據與條件的加入。 users.id=users_details.user_id

+0

你需要選擇每一個模型的關係,唯一的名字。每個用戶是否存在超過1個UserDetail? – AgRizzo 2014-09-26 12:31:35

+0

我對此很陌生。你能解釋我該怎麼做。 – chandoo 2014-09-27 04:36:54

回答

0

你已經爲每個模型關聯聲明瞭兩個關係,當你應該只有一個關聯關係時。

像這樣: 在userDetail型號:

public $hasMany = array(
     'User' => array(
      'className' => 'User', 
      'foreignKey' => 'user_id' 

     ) 
    ); 

並因此在用戶模型:

public $belongsTo = array(
     'UserDetail' => array(
      'className' => 'UserDetail', 
      'foreignKey' => 'user_id', 
      'conditions' => '', 
      'fields' => '', 
      'order' => '' 
     ) 
    ); 

退房的documentation瞭解更多詳情。

+0

對不起老闆,我無法得到結果。我得到的查詢輸出是。 「SELECT' User'.'id','User'.'first_name','User'.'last_name','User'.'email','User'.'mobile','User'.'pswd','User'.'pswd', 'UserDetail'.'user_id','UserDetail'''address','UserDetail'''city','UserDetail'''state','UserDetail'.'postcode','UserDetail'.'''''','UserDetail' '.'photo' FROM'cakedemo'.'users' AS'User' LEFT JOIN'cakedemo'.'users_details' As'UserDetail' ON('User'.'user_id' ='UserDetail'.'id')WHERE 1 = 1「。它必須是('User'.'id' ='UserDetail'.'user_id') – chandoo 2014-09-27 04:40:54

0
  • user has(id,name,email)id是主鍵。
  • users_details has(user_id,address,city,postcode)user_id是用戶表的外鍵。手段。

一點要記住:

  • 以一對一的關係 - hasOne - 一個用戶表有一個users_detail

  • 通過belongsTo - 甲的UserDetails表屬於用戶表。

因此,兩個表之間的關係是hasone和belongsto。

在下面找到合適的代碼。

用戶模式:

public $hasOne = array('UsersDetail' => array(
         'className' => 'UsersDetail', 
         'foreignKey' => 'user_id') 
         ); 

UsersDetail模型

public $belongsTo = array('User' => array(
          'className' => 'Users', 
          'foreignKey' => 'id', 
          'conditions' => '', 
          'fields' => '', 
          'order' => '') 
         ); 

其提供精確的連接。您可以添加條件,在收藏中訂購。

輸出查詢

SELECT `User`.`id`, `User`.`first_name`, `User`.`last_name`, `User`.`email`, `User`.`mobile`, `User`.`pswd`, `UsersDetail`.`user_id`, `UsersDetail`.`address`, `UsersDetail`.`city`, `UsersDetail`.`state`, `UsersDetail`.`postcode`, `UsersDetail`.`dob`, `UsersDetail`.`photo` FROM `cakedemo`.`users` AS `User` LEFT JOIN `cakedemo`.`users_details` AS `UsersDetail` ON (`UsersDetail`.`user_id` = `User`.`id`) WHERE 1 = 1 

謝謝

+0

查詢已經解決。 – chandoo 2014-09-27 05:11:35