Я подытожу свой ответ на основании моего комментария и дам подсказки по вашим запросам.
По сути, условие 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;
}
Это не только делает его более понятным, но и помогает вам в будущих запросах, где вы обрабатываете эти отношения.