Database CakePHP模型链接,belongsTo,hasOne

Database CakePHP模型链接,belongsTo,hasOne,database,cakephp,model,foreign-keys,cakephp-2.0,Database,Cakephp,Model,Foreign Keys,Cakephp 2.0,我读了,但没读到。 我有一个名为frendslists的表。每个用户(owner\u user\u id)都有太多的朋友,我将这些朋友添加到friend\u id列中。(型号名称为Friendslist) 我还有一个profiles表。每个独特的人都有自己的个人资料。一个人只能有一个配置文件。(型号名称为配置文件) 我想将FriendsList表链接到profiles表。这是一对一(hasOne)还是多对一(belongsTo)类型的关系 当我查询friendslists表时,我想获得朋友的个人

我读了,但没读到。
我有一个名为
frendslists
的表。每个用户(
owner\u user\u id
)都有太多的朋友,我将这些朋友添加到
friend\u id
列中。(型号名称为Friendslist)

我还有一个
profiles
表。每个独特的人都有自己的个人资料。一个人只能有一个配置文件。(型号名称为配置文件)

我想将FriendsList表链接到profiles表。这是一对一(hasOne)还是多对一(belongsTo)类型的关系

当我查询friendslists表时,我想获得朋友的个人资料数据。在CakePHP模型和表中应该做什么

我创建了一个外键,如下所示:

ALTER TABLE `friendslists`
  ADD CONSTRAINT `friendslists_ibfk_1` 
  FOREIGN KEY (`friend_id`) 
  REFERENCES `profiles` (`profile_user_id`) 
  ON DELETE CASCADE ON UPDATE CASCADE;
我将模型文件更改为:

class Friendslist extends AppModel {
    var $name = 'Friendslist';
    var $useTable = 'friendslists';

    public $belongsTo = array(
        'Profile' => array(
            'className'    => 'Profile',
            'foreignKey'   => 'friend_id'
        )
    )

    function getAll(){
        return $this->find('all');
    }
}
最后,当我这样做时:

$records=$this->Friendslist->find('all', array('conditions' => array(
    'Friendslist.owner_user_id' => 1234)
));
我得到以下结果:

     [Friendslist] => Array
            (
                [id] => 1
                [owner_user_id] => 1234
                [friend_id] => 9200
            )

        [Profile] => Array
            (
                [id] => 
                [profile_user_id] => 
                [name] => 
                [location] => 
             )

    )

我确信profiles表有一个profile\u user\u id=9200的记录。但是个人资料记录是空的。

我有点不明白为什么你要将好友列表链接到个人资料。将人与人联系起来,然后从中获取个人资料,不是更有意义吗

在任何情况下,您所描述的都是Hasandbelongtomy(HABTM)

因此,在您的个人模型中,您希望指定他们与许多其他人(或在您的案例配置文件中)关联,并指定查找表

类似于

public $hasAndBelongsToMany = array(
        'Person' => array(
            'className' => 'Profile',
            'joinTable' => 'friendslists',
            'foreignKey' => 'owner_id',
            'associationForeignKey' => 'friend_id'
        )
    );
然后在FriendsList模型中,我将其描述为一个belongs,列出所有者和个人资料

比如:

public $belongsTo = array(
    'Person' => array(
            'className' => 'Person'
           ,'foreignKey' => 'owner_user_id'
        ),
    'Profile' => array(
            'className' => 'Profile'
           ,'foreignKey' => 'friend_id'
        )
);
您可能需要调整名称,因为我很难准确理解哪些实体在起作用,但这至少会给您一个想法

public $hasAndBelongsToMany = array(
        'Person' => array(
            'className' => 'Profile',
            'joinTable' => 'friendslists',
            'foreignKey' => 'owner_id',
            'associationForeignKey' => 'friend_id'
        )
    );
public $belongsTo = array(
    'Person' => array(
            'className' => 'Person'
           ,'foreignKey' => 'owner_user_id'
        ),
    'Profile' => array(
            'className' => 'Profile'
           ,'foreignKey' => 'friend_id'
        )
);