gpt4 book ai didi

mysql - 在 CakePHP 中计算新的平均 afterSave(或更好的东西?)

转载 作者:行者123 更新时间:2023-11-29 05:41:05 24 4
gpt4 key购买 nike

我正在构建一个评级系统,用户可以在其中对某项进行 1-5 星评级。

我想知道是否有一种方法可以在 afterSave 或类似的东西上自动计算所有特定项目的评级(从 model='x' 和 foreign_key='y' 的评级表)。

我可以在 ratings_controller 中很好地完成它...只是认为在模型中自动完成可能更理想。谁能为此指出正确的方向?

我很想知道 CakePHP 中有某种关联设置允许它为您执行此操作 - 例如:

//Rating model
var $belongsTo = array(
'Restaurant' => array(
'averageValue' => 'rating
)
);

但是 - 我敢肯定这要求很多 :)

最佳答案

如果您想将平均值保存到项目表中的一个字段中,那么 afterSave 可能是目前最好的解决方案。

cake 唯一可以自动为您做的是跟踪一个项目有多少评级(counterCache),但不是其他聚合函数。

virtualField 可能不错,但我从未将其用于聚合函数,所以我不确定。此外,如果您的评分不经常更改,则会给系统带来不必要的工作。

在评分模型中:

function afterSave($created){
$avgValue = $this->Query('SELECT AVG(rating) as rating FROM ratings WHERE ratings.restaurant_id = '.$this->restaurant_id);
$this->Restaurant->updateRatingAverage($this->restaurant_id,$avgValue[0][0]['rating']);
}

在餐厅模型中

function updateRatingAverage($id,$avg){  
$this->id = $id;
$this->field('your_average_field_here',$avg);
}

您可能想记录 $avgValue 以查看它的结构,但我认为我做对了。

关于mysql - 在 CakePHP 中计算新的平均 afterSave(或更好的东西?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6809024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com