开发者

How do I create a Unary association in CakePhp?

Is there a shortcut for creating Unary associations in Cake?

For example, a user is a friend of another user. I'm pretty sure it's going to violate cake's conventions if I try it the hard way and code the associations myself.

Cake has HABTM:

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

Will this work? A user model assoc to another user model.

Update: How do I save the data now?

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

$request["Requester"] and $request["Requestee"] both hold objects of type User. The HABTM rel is defined in the User model

var $hasAndBelongsToMany = array(
        'Friend' => array(
            'className' => 'Friend',
            'joinTable' => 'friends',
            'foreignKey' => 'user_id',
            'associationForeignKey' => 'id'
        ),
        'Admirer'=>array(
            'className'=>'Friend',
            'joinTable'=>'friends',
            'foreignKey' => 'friend_id',
            'associationForeignKe开发者_如何学JAVAy' => 'id',            
        )
    );

All that happens is the $data->["Friend"]'s id is stored in the id column of the friends table


Here is a solution I use in an example application

Two tables are needed, users and followers. The important fields are User->id, Follower->user_id, Follower->friend_id.

I hope this snippet helps.

<?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


Bjorn,

he is asking about User habtm User...

your join table should be users_users and the relation should look like this

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

i think that should do the trick


In CakePHP there are several variables in your model available to do that, like $hasMany, $belongsTo and $hasAndBelongsToMany. Please read the Cookbook for further explaination.. http://book.cakephp.org/view/78/Associations-Linking-Models-Together .

In your example, I think you need HABTM.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜