Search code examples
selectyiimaxrelational

Yii fail to retrieve max column value


I have two models, one is Auction, the other is Bid.

An Auction has many Bids. they are associated by foreign key auction_id in Bid

Now, I want to find the max value of the Bid's price for each Auction.

$dataProvider = new CActiveDataProvider('Auction', array('criteria' => array(
                    'with' => array(
                        'bids' => array(
                            'alias'=>'b',
                            'group' => 'auction_id',
                            'select' => 'max(b.price) as maxprice'
                        )
                   )
             )
        )
);

And I have defined a maxprice property in Auction's model class.

However, if I try to retrieve the maxprice property, it returns NULL.

To be more specific, I render the $dataprovider to a view page, it fails to get the maxprice property.

PS:

I executed the query in mysql, the query result turns out to be correct.

So, there must be something wrong with the Yii code

SQL code:

SELECT `t`.`id` , max(b.price) as maxprice

FROM `auction` `t` 

LEFT OUTER JOIN `bid` `b` ON (`b`.`auction_id`=`t`.`id`)  GROUP BY auction_id

Solution

  • Put the value you want before the relation, like so:

    $dataProvider = new CActiveDataProvider('Auction', array('criteria' => array(
        'select' => 't.*, max(b.price) as maxprice',
        'with' => array(
            'bids' => array(
                'alias'=>'b',
                'group' => 'auction_id',
                'together'=>true,
            )
    

    You can replace the "t.*" with specific field names if you like.

    OR you can simply use the select, join and group attributes on your Auction model and skip the relation altogether.