如何基于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;
}