【问题标题】:Models and Pivot Tables模型和数据透视表
【发布时间】:2012-12-03 02:44:45
【问题描述】:

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

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

【问题讨论】:

    标签: phalcon


    【解决方案1】:

    试试这个 (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->许多用户_统计 许多

    【讨论】:

    • 感谢您的提示!可悲的是,它没有用,但它确实为我指明了正确的方向。事实证明,所有这三个模型都需要同时拥有多个和 belongsTo。我想通了,因为我可以从 user_stats 获取用户,但反之则不行。我将在下面发布答案。感谢您的帮助!
    • 很高兴你把它整理好了:)
    【解决方案2】:

    在玩了一段时间后,在 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');
        }
    }
    

    用户统计模型:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      • 2019-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-12
      相关资源
      最近更新 更多