Чтение данных из таблицы комментариев с помощьюCount также возвращает массив данных - PullRequest
0 голосов
/ 07 февраля 2020

В Laravel 6 У меня есть таблица комментариев с полем parent_id:

id  bigint(20) unsigned 
ad_id   bigint(20) unsigned 
parent_ad_comment_id    bigint(20) unsigned NULL    
user_id int(10) unsigned NULL   
approved    tinyint(1) [0]  
comment mediumtext  
rating  tinyint(3) unsigned NULL    
created_at  timestamp [CURRENT_TIMESTAMP]

И я хочу получить только root ите с количеством дочерних данных:

$adComments = AdComment
    ::getByAdId($ad_id)
    ->withCount('children')
    ->whereNull('parent_ad_comment_id')
    ->get();

с определенной областью действия:

public function scopeGetByAdId($query, $ad_id= null)
    {
        if (!empty($ad_id)) {
            if ( is_array($ad_id) ) {
                $query->whereIn(with(new AdComment)->getTable().'.ad_id', $ad_id);
            } else {
                $query->where(with(new AdComment)->getTable().'.ad_id', $ad_id);
            }
        }
        return $query;
    }

и отношением:

public function children()
{
    return $this->hasMany('App\AdComment', 'parent_ad_comment_id', 'id');
}

Но, глядя на sql, я ожидаю 1 ожидаемый запрос и еще несколько запросов для любой строки поиска в первом запросе :

SELECT `sda_ad_comments`.*, (  SELECT count(*) 
    FROM `sda_ad_comments`     AS `sda_laravel_reserved_0` 
    WHERE `sda_ad_comments`.`id` = `sda_laravel_reserved_0`.`parent_ad_comment_id` 
    ORDER BY `id` desc)     AS `children_count` 
    FROM `sda_ad_comments` 
    WHERE `sda_ad_comments`.`ad_id` = '1'     AND `parent_ad_comment_id` is null 
    ORDER BY `id` desc 
...  

   SELECT * 
    FROM `sda_ad_comments` 
    WHERE `sda_ad_comments`.`parent_ad_comment_id` = '9'     AND `sda_ad_comments`.`parent_ad_comment_id` is not null 
    ORDER BY `id` desc 


   SELECT * 
    FROM `sda_ad_comments` 
    WHERE `sda_ad_comments`.`parent_ad_comment_id` = '8'     AND `sda_ad_comments`.`parent_ad_comment_id` is not null 
    ORDER BY `id` desc 

и я вижу массив детей, который я не ожидал увидеть. Почему я получил данные, которые мне не нужны, и как от них избавиться?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...