Используйте аксессор getAttribute в модели запросов 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...

Вы добавили его в свой массив $fillable = [...]?

Kenny Horna 12.02.2019 00:18

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

Kenny Horna 12.02.2019 00:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
265
1

Ответы 1

Когда вы добавляете добавленное свойство, это своего рода волшебное свойство, которое laravel добавляет каждый раз, когда у вас есть экземпляр красноречивого режима.

Но в вашей схеме таблицы буквально нет столбца reviews_count.

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

Другие вопросы по теме