如何基于FK关系在DataMapper PHP构造函数中生成自定义属性

如何基于FK关系在DataMapper PHP构造函数中生成自定义属性,php,codeigniter,codeigniter-datamapper,Php,Codeigniter,Codeigniter Datamapper,我有两个目标 class Product extends DataMapper { var $has_many = array('productrating'); public $averageRating = null; function __construct($id = NULL) { parent::__construct($id); echo "my id: " . $this->id; } } 及

我有两个目标

class Product extends DataMapper
{
    var $has_many = array('productrating');

    public $averageRating = null;

    function __construct($id = NULL)
    {
        parent::__construct($id);

        echo "my id: " . $this->id;
    }
}

我最终想要完成的是,根据FK与ProductRatings的关系,使用平均评级填充
Product->$averageRating
属性,您猜得到了

我的第一个想法是访问关系,根据ProductRating行的数量进行计算,并在构造函数中填充属性。但我甚至在访问构造函数中的对象时都遇到了问题。这让我相信我可能走错了方向。如何使用DataMapper实现这一点


我知道可以在视图页面中进行计算,但如果可能的话,我真的希望将其保留在模型中。

理想情况下,我希望在构造函数中设置此属性,但将“getAverageRating”函数添加到Product类中非常简单。在此函数中访问对象的工作与预期的一样

public function getAverageRating()
{
    $ratings = array();
    foreach($this->productrating as $rating)
    {
        array_push($ratings, $rating->rating);
    }

    if(count($ratings) > 0)
    {
        return array_sum($ratings) / $this->productrating->count();
    }

    return null;
}
public function getAverageRating()
{
    $ratings = array();
    foreach($this->productrating as $rating)
    {
        array_push($ratings, $rating->rating);
    }

    if(count($ratings) > 0)
    {
        return array_sum($ratings) / $this->productrating->count();
    }

    return null;
}