2012-04-11 5 views
0

hydratisieren So habe ich zwei Objekte.Wie man eine benutzerdefinierte Eigenschaft in DataMapper PHP-Konstruktor auf Basis der FK-Beziehung

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

    public $averageRating = null; 

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

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

und

class ProductRating extends DataMapper 
{ 
    var $table = "product_ratings"; 
    var $has_one = array('product'); 

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

Was würde ich schließlich erreichen möchte, ist bevölkern die Product->$averageRating Eigenschaft mit, Sie ahnen es, die durchschnittliche Bewertung auf der Grundlage der FK Beziehung mit ProductRatings.

Mein erster Gedanke war, auf die Beziehung zuzugreifen, die Mathematik basierend auf der Anzahl der ProductRating-Zeilen auszuführen und die Eigenschaft im Konstruktor zu füllen. Aber ich habe Probleme, sogar auf das Objekt im Konstruktor zuzugreifen. Das führt mich zu der Annahme, dass ich wahrscheinlich in die falsche Richtung gehe. Wie kann dies mit DataMapper erreicht werden?

Ich weiß, die Mathematik könnte in den View-Seiten getan werden, aber ich würde das gerne im Modell behalten, wenn möglich.

Antwort

0

Idealerweise möchte ich, dass diese Eigenschaft im Konstruktor festgelegt wird, aber es war einfach genug, der Produktklasse eine "getAverageRating" -Funktion hinzuzufügen. Der Zugriff auf das Objekt in dieser Funktion funktionierte wie erwartet.

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; 
} 
Verwandte Themen