0

所以我有两个对象。

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 ProductRating extends DataMapper
{
    var $table = "product_ratings";
    var $has_one = array('product');

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

我最终想要完成的是Product->$averageRating使用基于与 ProductRatings 的 FK 关系的平均评级来填充属性。

我的第一个想法是访问关系,根据 ProductRating 行数进行数学运算,然后在构造函数中填充属性。但是我什至在访问构造函数中的对象时遇到了问题。这让我相信我可能会以错误的方式解决这个问题。如何使用 DataMapper 实现这一点?

我知道数学可以在视图页面中完成,但如果可能的话,我真的很想将它保留在模型中。

4

1 回答 1

0

理想情况下,我希望在构造函数中设置此属性,但向 Product 类添加“getAverageRating”函数很容易。访问此函数中的对象按预期工作。

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;
}
于 2012-04-12T13:21:28.533 回答