如何在CakePhp中创建一元关联?

时间:2009-10-16 06:49:28

标签: php cakephp

是否有在Cake中创建一元关联的快捷方式?

例如,用户是另一个用户的朋友。如果我以艰难的方式尝试并自己编写关联代码,我很确定它会违反蛋糕的约定。

Cake有HABTM:

var $hasAndBelongsToMany = array(
    'User' =>
        array(
            'className' => 'User',
            'joinTable' => 'friends',
            'foreignKey' => 'user_id',
            'associationForeignKey' => 'friend_id',
            'unique' => true
        )
);

这会有用吗?与另一个用户模型关联的用户模型。

更新 我现在如何保存数据?

$this->data["Friend"] = $request["Requester"];
$this->data["Admirer"] = $request["Requestee"];                         
$this->Friend->create();
$this->Friend->save($this->data);

$ request [“Requester”]和$ request [“Requestee”]都持有User类型的对象。 HABTM rel在用户模型中定义

var $hasAndBelongsToMany = array(
        'Friend' => array(
            'className' => 'Friend',
            'joinTable' => 'friends',
            'foreignKey' => 'user_id',
            'associationForeignKey' => 'id'
        ),
        'Admirer'=>array(
            'className'=>'Friend',
            'joinTable'=>'friends',
            'foreignKey' => 'friend_id',
            'associationForeignKey' => 'id',            
        )
    );

所有这一切都是$ data-> [“Friend”]的id存储在friends表的id列中

3 个答案:

答案 0 :(得分:3)

以下是我在示例应用程序中使用的解决方案

需要两个表,用户和关注者。重要的字段是User-> id,Follower-> user_id,Follower-> friend_id。

我希望这段代码有所帮助。

<?php
class User extends AppModel {
    public $useTable='users';
    public $hasAndBelongsToMany=array(
        'Friend'=>array(
            'className'=>'User',
            'joinTable'=>'followers',
            'foreignKey' => 'user_id',
            'associationForeignKey' => 'friend_id',
            ),
        'Admirer'=>array(
            'className'=>'User',
            'joinTable'=>'followers',
            'associationForeignKey' => 'friend_id',
            'foreignKey' => 'user_id',
            ),
        );
}

-teh

答案 1 :(得分:1)

比约,

他询问用户habtm用户......

你的联接表应该是users_users,关系应该是这样的

    var $hasAndBelongsToMany = array(
        'Friend' =>
                array(
                        'className' => 'UserUser',
                        'joinTable' => 'users_users',
                        'foreignKey' => 'user_id',
                        'associationForeignKey' => 'friend_id',
                        'unique' => true
                )
);

我认为应该做的伎俩

答案 2 :(得分:0)

在CakePHP中,您的模型中有几个变量可用,例如$ hasMany,$ belongsTo和$ hasAndBelongsToMany。请阅读食谱以获得进一步的解释.. http://book.cakephp.org/view/78/Associations-Linking-Models-Together

在您的示例中,我认为您需要HABTM。