2012-04-11 2 views
0

Итак, у меня есть два объекта.Как убрать произвольное свойство в конструкторе DataMapper PHP на основе отношений FK

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 собственность с, как вы уже догадались, средний рейтинг, основанный на отношениях FK с ProductRatings.

Моя первая мысль заключалась в том, чтобы получить доступ к отношениям, выполнить математику на основе количества строк ProductRating и заполнить свойство внутри конструктора. Но у меня проблемы с доступом к объекту внутри конструктора. Это заставляет меня поверить, что я, вероятно, ошибаюсь. Как это можно сделать с помощью DataMapper?

Я знаю, что математика может быть сделана на страницах просмотра, но мне бы хотелось сохранить это в Модели, если это возможно.

ответ

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; 
} 
Смежные вопросы