Laravel возвращает UserTitle By Count - PullRequest
1 голос
/ 13 июня 2019

В моем проекте я стараюсь генерировать пользовательские заголовки по количеству сообщений, комментариев, вопросов и ответов пользователей из таблицы заголовков.

У меня есть таблица заголовков, в которую можно добавлять новые заголовки.И у каждого заголовка есть свой пост.Поэтому, когда пользователь имеет большее или равное количество сообщений, заголовок будет сгенерирован из таблицы заголовков.

Проблема в том, что я не могу получить большее значение в таблице заголовков с количеством сообщений пользователей.Когда я использую <=, он показывает заголовок, но когда я использую >=, он ничего не возвращает.

Ps: Нет никакой связи между пользователями и таблицей заголовков.Он возвращает только равные данные заголовка.

Мои коды приведены ниже:

public function title()
{

    $commentcount = $this->hasMany('App\Comment')
                        ->whereUserId($this- >id)
                        ->count();

    $questioncount = $this->hasMany('App\Question')
                        ->whereUserId($this->id)
                        ->count();

    $answercount = $this->hasMany('App\Answer')
                        ->whereUserId($this->id)
                        ->count();

    $total = $commentcount + $questioncount + $answercount;
    $title = Title::where('postcount', '>=', $total)->first();
    if ($title) {

        $show = '<span class="badge badge-danger rutbe" style="background:' . $title->color . '">' . $title->text . '</span>';
        return $show;
    } else {

        return false;
    }
}

Я не могу понять, почему ничего не возвращается, когда число больше или равно.

1 Ответ

0 голосов
/ 13 июня 2019

Я подытожу свой ответ на основании моего комментария и дам подсказки по вашим запросам.

По сути, условие where в ваших кодах соответствует нескольким записям заголовков. Поэтому выбор первого не всегда будет соответствовать правильному. Поскольку вы хотите соответствовать «самому низкому» подходящему заголовку, вы, вероятно, хотите изменить

$title = Title::where('postcount', '>=', $total)->first();

до

$title = Title::where('postcount', '>=', $total)->orderBy('postCount', 'ASC')->first();

Некоторые другие предложения по улучшению

$commentcount = $this->hasMany('App\Comment')
                    ->whereUserId($this- >id)
                    ->count();

Кажется, странно использовать в вашем (вероятно, User?) Классе. Вы должны рефакторинг это что-то вроде

public function comments() 
{
    return $this->hasMany('App\Comment');
}

Это определяет ваши отзывы пользователей к его комментариям. Если вы хотите, чтобы в вашей функции заголовка было количество комментариев пользователей, вы можете просто набрать

$this->comments()->count();

Когда вы делаете это для всех трех ваших отношений, ваш метод заголовка может выглядеть как

public function comments()
{
    return $this->hasMany('App\Comment');
}

public function questions()
{
    return $this->hasMany('App\Question');
}

public function answers()
{
    return $this->hasMany('App\Answer');
}

public function title()
{
    $total = $this->comments()->count() + $this->questions()->count() + $this->answers()->count();

    $title = Title::where('postcount', '>=', $total)->orderBy('postcount', 'ASC')->first();

    if ($title) 
        return '<span class="badge badge-danger rutbe" style="background:' . $title->color . '">' . $title->text . '</span>';
    }

    return false;
}

Это не только делает его более понятным, но и помогает вам в будущих запросах, где вы обрабатываете эти отношения.

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