2009-10-16 78 views
0

有没有在Cake中创建一元关联的捷径?如何在CakePhp中创建一个Unary关联?

例如,用户是另一个用户的朋友。我敢肯定,如果我以艰难的方式尝试并亲自编写关联代码,它将违反蛋糕的惯例。

蛋糕已经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版本在用户模型中定义

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',    
     ) 
    ); 

所发生的一切是$数据 - 的ID存储在朋友表中的id列> [“朋友”]

回答

0

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

在你的例子中,我认为你需要HABTM。

+0

这不只是送他阅读所有的车型真的很有帮助。他显然已经做到了。 – 2010-02-25 23:13:38

1

比约恩,

他要求有关用户的habtm用户...

你的连接表应该是users_users和的关系应该是这样的

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

我认为应该做的技巧

+0

和'朋友'有一个单独的模型和控制器比用户? – 2009-10-16 17:07:40

+1

连接表没有*被称为users_users,但是如果你想使用Cake的automagic,那么它应该是。 – 2009-10-16 17:57:13

+0

此外,如果这是您的模型的名称,className值应该只是“用户”。如果你喜欢通过:'with'=>'UsersUser',你可以定义一个连接表,但只有在连接表上有额外的HABTM数据时才需要。 – 2009-10-16 17:58:56

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

为了匹配单数模型名称格式,我建议使用'Friend'而不是'Friends','Admirer'而不是'Admirers'。除此之外,这是一个好方法。 – 2009-10-16 18:00:07