所以我有两个对象。
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实现这一目标?
我知道数学可以在View页面中完成,但如果可能的话,我真的希望将它保留在模型中。
答案 0 :(得分:0)
理想情况下,我希望在构造函数中设置此属性,但很容易添加" 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;
}