2012-12-03 38 views
2

我有一个自定义的书面解决方案,我正在将其移植到Phalcon。这是我第一次使用Phalcon运行,虽然它易于使用并且有很好的文档记录,但我似乎无法找到关于通过数据透视表链接模型的任何信息。模型和数据透视表

这里是跑下来:

我有用户。用户有统计信息。这两个链接与一个名为users_stats的表。该表格包含两列:用户ID和统计ID。我创建了第三个类,名为Users_Stats以在数据透视表之后进行建模。

用户模型:

<?php 
class Users extends \Phalcon\Mvc\Model { 
    public function initialize() { 
     $this->hasMany('stat_id', 'Users_Stats', 'user_id', array('foreignKey' => true)); 
    } 
} 

统计型号:

<?php 
class Stats extends \Phalcon\Mvc\Model { 
    public function initialize() { 
     $this->belongsTo('stat_id', 'Users_Stats', 'id'); 
    } 
} 

Users_Stats型号:

<?php 
class Users_Stats extends \Phalcon\Mvc\Model { 
    public function initialize() { 
     $this->hasMany('user_id', 'Users', 'id'); 
     $this->hasMany('stat_id', 'Stats', 'id'); 
    } 
} 

我只是希望能够采集基于用户的统计信息。我不确定我是否缺少每个模型都需要属于并且hasMany(统计有很多User_Stats & & User_Stats有很多Stat;等等)。我知道我错过了一些东西。

任何帮助,将不胜感激!谢谢!

回答

3

尝试此(source):

用户模型:

<?php 
class Users extends \Phalcon\Mvc\Model { 
    public function initialize() { 
     $this->hasMany(
      'stat_id', 
      'Users_Stats', 
      'user_id', 
      array('foreignKey' => true) 
     ); 
    } 
} 

统计型号:

<?php 
class Stats extends \Phalcon\Mvc\Model { 
    public function initialize() { 
     $this->hasMany('stat_id', 'Users_Stats', 'id'); 
    } 
} 

Users_Stats型号:

<?php 
class Users_Stats extends \Phalcon\Mvc\Model { 
    public function initialize() { 
     $this->belongsTo('user_id', 'Users', 'id'); 
     $this->belongsTo('stat_id', 'Stats', 'id'); 
    } 
} 

用户1->许多Users_Stats很多< -1统计信息

+0

谢谢你的提示!可悲的是,这并不奏效,但它确实指向了正确的方向。事实证明,所有这三个模型都需要同时拥有许多和belongsTo。我想通了,因为我可以从user_stats获得用户,但反之亦然。我将在下面发布答案。谢谢你的帮助! –

+1

很高兴你把它整理出来:) –

3

经过一番玩弄,以及来自Nikolaos Dimopoulos的一些很好的帮助,我发现了一些事情。

  1. 类不能有下划线。
  2. 查找表的模型必须属于每个类,以及必须有许多这些相同的类。
  3. 属于查找表模型的每个类都必须属于查找表的模型,并且必须有许多查找表的模型。

用户模型:

<?php 
class Users extends \Phalcon\Mvc\Model { 
    public function initialize() { 
     $this->belongsTo('id', 'UserStats', 'user_id'); 

     $this->hasMany('user_id', 'UserStats', 'id'); 
    } 
} 

统计模型:

<?php 
class Stats extends \Phalcon\Mvc\Model { 
    public function initialize() { 
     $this->hasMany('stat_id', 'UserStats', 'id'); 

     $this->belongsTo('stat_id', 'UserStats', 'id'); 
    } 
} 

UserStats型号:

<?php 
class UserStats extends \Phalcon\Mvc\Model { 
    /** 
    * Set database name as there is no UserStats DB 
    * 
    * @return string 
    */ 
     public function getSource() { 
     return 'user_stats'; 
    } 

    public function initialize() { 
     $this->belongsTo('user_id', 'Users', 'id'); 
     $this->belongsTo('stat_id', 'Stats', 'id'); 

     $this->hasMany('id', 'Users', 'user_id'); 
     $this->hasMany('id', 'Stats', 'stat_id'); 
    } 
}