2014-09-22 96 views
0

我有2個模型被加入,但沒有推出的ID,但與另一個領域。Cakephp模型忽略屬於的條件

class Post extends AppModel{ 
    public $useDbConfig = 'test'; 
    public $actsAs = array('Containable'); 

    public $belongsTo= array(
     'User' => array(
      'className' => 'User', 
      'foreignKey' => false, 
      'type' => 'inner', 
      'conditions' => array('User.field = Post.field') 
    )); 
} 

但是cakephp沒有正確連接2個模型。對於每個帖子,它只是給第一個用戶(用戶ID爲1)。當我檢查SQL語句時,用戶聲明如下:

​​

任何想法爲什麼這不起作用? 我也嘗試手動加入模型:

$this->paginate = array(
     'limit' => '15', 
     'joins' => array(
      'INNER JOIN users User ON (User.field = Post.field)' 
     ) 
    ); 

    $posts= $this->paginate('Post'); 

任何想法?

編輯

我完全忘了提,這兩個表是在不同的數據庫。也許有問題。但到目前爲止,我在連接不同數據庫的表格時沒有問題。

編輯

我錯了關於加盟,使我改變它「屬於關聯」到「hasOne」,因爲一個帖子只能由一個用戶寫入。但仍然沒有改變。

+0

可以顯示你想加入的模型嗎? – 2014-09-22 15:18:06

+0

上面顯示了後期模型。你需要什麼用戶模型?我沒有更改用戶模型。 – MrSmith 2014-09-22 15:22:22

+0

顯示'find'語句。你顯示的SQL語句有什麼問題? – AgRizzo 2014-09-22 15:35:02

回答

0

我找到了解決辦法,雖然我不明白爲什麼其他人將無法正常工作。我把

$this->Post->primaryKey = 'field'; 

$posts= $this->paginate('Post'); 

的權利,現在,它的工作原理。任何人都可以告訴我爲什麼其他方式不起作用?

0

可以使用foreignKey參數任何領域,不一定是id

型號:

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

用戶型號:

public $hasMany = array (
    'Post' => array (
     'className' => 'Post', 
     'foreignKey' => 'some_user_field', 
     'dependent' => true 
    ) 
); 

按照book

遵循CakePHP約定並不是強制性的。您可以輕鬆地使用 重寫關聯定義中的任何foreignKey。儘管如此,堅持約定會使您的代碼重複性更低,更易於閱讀和維護。

否則,手動進行joins

$this->paginate = array(
    'limit' => '15', 
    'joins' => array(
     array(
      'table' => 'users', 
      'alias' => 'User', 
      'type' => 'inner', 
      'conditions' => array('User.field = Post.field') 
     ) 
    ) 
); 
+0

沒有可悲的是,cakephp不是那麼開放。外鍵意味着另一個表的id將與當前的表外鍵連接。 – MrSmith 2014-09-22 15:35:22

+0

好吧,我現在明白了你沒有使用外鍵,所以我最初做了這個參考。無論如何,我提出了參數'連接'的建議。 – 2014-09-22 15:52:39

+0

不,它不工作。如果我打印出數據,它只會顯示後期數據,但不包含有關用戶的信息。 – MrSmith 2014-09-23 07:11:42