模型和数据透视表

时间:2012-12-03 02:44:46

标签: phalcon

我有一个自定义的书面解决方案,我将其移植到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(Stats有很多User_Stats&amp;&amp; User_Stats有很多Stat;等等)。我知道我错过了一些东西。

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

2 个答案:

答案 0 :(得分: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-&gt;许多Users_Stats很多&lt; -1 Stats

答案 1 :(得分:3)

经过一些游戏,以及Nikolaos Dimopoulos的一些帮助后,我发现了一些事情。

  1. 课程不能有下划线。
  2. 查找表的模型必须属于每个类,并且必须具有许多相同的类。
  3. 属于查找表模型的每个类必须属于查找表的模型,并且必须具有许多查找表的模型。
  4. 用户模型:

    <?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');
        }
    }