2014-05-25 2 views
0

J'utilise CDbCriteria pour filtrer une CListView (page Produits)CDbCriteria avec le modèle virtuel attribut

$criteria = new CDbCriteria(); 
    $criteria->join ='LEFT JOIN collections ON collections.id = t.collection_id'; 

    (isset($_GET['name'])) ? $name = $_GET['name'] : $name = ""; 
    $criteria->addCondition('t.name LIKE :name'); 
    $criteria->params = array(':name' => "%$name%"); 
    $criteria->order = 't.name asc'; 

    //get count 
    $count = Products::model()->count($criteria); 

Mais le problème: Dans le modèle de produits que j'ai un attribut virtuel nommé ProductFinalPrice ce qui calcule le prix final sur la base rôle de l'utilisateur & catégorie de produit et prix du produit spécifique à l'utilisateur.

Comment puis-je trier par cet attribut virtuel?

Répondre

1

Si vous avez un attribut virtuel simple qui peut être calculé par la base de données, vous devez définir l'attribut avec SELECT [...] AS virtual attribute_name. Here, here ou here est un sujet à ce sujet.

Si vous avez un calcul plus compliqué qui est une méthode dans votre modèle, vous ne pouvez pas utiliser CActiveDataprovider. Le mieux serait d'utiliser CArrayDataprovider qui peut utiliser des attributs virtuels. Je suis désolé, je ne peux pas trouver un bon exemple pour ça pour le moment. Sachez que CArrayDataprovider est quelque peu inefficace, il est donc préférable de l'éviter chaque fois que vous le pouvez et faites de votre mieux pour mettre le calcul de cet attribut virtuel dans le sql de CDbCriteria.

Questions connexes