在查询模型Laravel中使用accesor getAttribute

时间:2019-02-11 22:47:34

标签: php laravel

我有Post模型,并且有:

protected $appends = ['reviews_count'];

public static function boot()
{
    parent::boot();

    static::saved(function () {
        static::updateRanks();
    });
}

public function reviews() {
   return $this->hasMany(Review:class);
}

public static function updateRanks()
{
    DB::statement("UPDATE posts set `rank` = (SELECT FIND_IN_SET( CONCAT(points, '_', created_at), (SELECT GROUP_CONCAT( CONCAT(points, '_', created_at) ORDER BY points desc, created_at asc ) FROM (select * from posts) as posts_rankings)))");
}

public function getReviewsCountAttribute()
{
    return $this->reviews()->active()->count();
}

我需要在CONCAT(points, '_', created_at)中添加一个reviews_count,然后执行ORDER BY points desc, reviews_count desc, created_at asc。我该怎么做?如果添加,则会出现错误:unknown column reviews_count..

1 个答案:

答案 0 :(得分:0)

添加附加属性时,它是一种神奇的属性,laravel每次有雄辩的模式实例时都会附加。

但是,您的表架构实际上没有reviews_count列。

如果您确实需要,可以使用join或subquery从SQL查询中获取该计数。但是,具有此类带有原始语句的更新功能并不是遵循的最佳实践。最终,它变得难以阅读和调试。我将建议您尽可能地组织它。不用担心,我们都去过那里:)