У меня есть модель 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. Атрибут reviews_count не работает в запросе. Мне нужно добавить подзапрос или присоединиться. Как я могу это сделать? Я пытался:
DB::statement("UPDATE posts set `rank` = (SELECT COUNT(*) FROM reviews WHERE post_id = posts_rankings.id) as reviews_count, (SELECT FIND_IN_SET( CONCAT(points, '_', reviews_count, '_', created_at), (SELECT GROUP_CONCAT( CONCAT(points, '_', reviews_count, '_' created_at) ORDER BY points desc, reviews_count desc, created_at asc ) FROM (select * from posts) as posts_rankings)))");
Но это ошибка: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'reviews_count
@MihirBhende, это мой друг, я спрашиваю о запросе, насколько правильно я могу сделать подзапрос






Я полагаю, что вы уже задавали этот вопрос, и у него есть ответы