У меня есть модель 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...
Я не уверен на 100%, но думаю, что проблема в вашем операторе базы данных. reviews_count — это вычисляемый атрибут, созданный в модели, но вы пытаетесь использовать его в необработанном операторе БД (где этот атрибут/столбец еще не существует).






Когда вы добавляете добавленное свойство, это своего рода волшебное свойство, которое laravel добавляет каждый раз, когда у вас есть экземпляр красноречивого режима.
Но в вашей схеме таблицы буквально нет столбца reviews_count.
Вы можете получить это количество из SQL-запроса, используя соединение или подзапрос, если это то, что вам действительно нужно. Однако наличие таких функций обновления с необработанными операторами — не лучшая практика. В конце концов становится трудно читать и отлаживать. Я предлагаю вам структурировать его так хорошо, как вы можете. Не волнуйтесь, мы все были там :)
Вы добавили его в свой массив
$fillable = [...]?