2016-05-19 3 views
0

Эй так что им пытаются сделать upvote систему downvote и Im используя только 1 таблицу, столбцы таблицы являютсяLaravel Количество строк, где значение столбца 1

 $table->increments('id'); 
     $table->integer('user_id')->unsigned(); 
     $table->foreign('user_id')->references('id')->on('users'); 
     $table->integer('voter_id')->unsigned(); 
     $table->foreign('voter_id')->references('id')->on('users'); 
     $table->boolean('vote_type')->default(0); 
     $table->integer('commentable_id'); 
     $table->string('commentable_type'); 
     $table->string('unique_vote')->unique(); 

В основном я пытаюсь посчитать, сколько голосов комментарий имеет, но только там, где параметр vote_type равен == 1, а также наоборот для downvotes, где значение равно 0

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

Я знаю {{$ comment-> vote-> count()}}, но это возвращает полные строки независимо от значения vote_type, и мне интересно, есть ли у кого-либо решение или знает способ, сохраняя запросы низкий.

+0

Я не знаю Laravel, но я буду держать пари, что есть '-> где () 'в запросе, который позволяет фильтровать строки. – Barmar

ответ

0

Почему вы это делаете, как этот

public function showCart() { 

     $votes = Vote::where('vote_type',1)->count(); 
     // do stuff and then return the count with the actual data & view 

    } 

вы не можете цепи, как этот

$votes = Vote::where('vote_type',1)->where('something',$something)->count(); 

, если вы хотите, чтобы результат для зарегистрированного пользователя

$votes = Auth::user()->comments->where('vote_type',1)>count(); 

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

+0

Будет ли это добавлять тысячи запросов на лицевой стороне, если есть тысячи комментариев, каждый из которых имеет право голоса? –

0

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

public function upvotes() 
{ 
    return $this->morphMany('App\Models\General\Votes', 'commentable')->whereVoteType(1); 
} 
public function downvotes() 
{ 
    return $this->morphMany('App\Models\General\Votes', 'commentable')->whereVoteType(0); 
} 

-

public function index($category_slug, $subcategory_slug, $post_slug) 
{ 

    return view('pages.forum-post', [ 
    'post' => Post::With('comments','comments.user','comments.votes','comments.upvotes','comments.downvotes','comments.user.UserProfile')->whereSlug($post_slug)->firstOrFail() 
    ]); 
} 

- лезвие

@if ($comment->upvotes) 
    {{$comment->upvotes->count()}} 
@endif 
@if ($comment->downvotes) 
    {{$comment->downvotes->count()}} 
@endif 
<hr /> 
+0

Вы должны пройти через sql 101, просто чтобы определить свою логику на уровне db. –

+0

Я понимаю, что я делаю 2 запроса, чтобы проверить один и тот же db и вытащить все строки, чтобы получить счет, где я мог бы просто щелкнуть say ... id. но по крайней мере это лучше, чем выполнение 2 запросов за комментарий. im доволен моими 6 запросами на странице форума. –

Смежные вопросы