Подсчет существующих идентификаторов в другой таблице - laravel - PullRequest
0 голосов
/ 12 июня 2018

У меня есть два элемента в таблице под названием products с идентификаторами 1 and 2.Существует таблица с именем invite, которая имеет внешний ключ product_id для products.

В моем контроллере ниже я пытаюсь подсчитать количество идентификаторов продуктов, существующих в таблице invite.

например,

Product            invite

id    name        id   token     product_id  user_id
1     cal         1    ..d          1           2
2     del         2    dd..         2           2
3     mac         3    ..gh4        2           2

Как и выше, идентификаторы 1 and 2 существуют в таблице приглашений.это означает, что общее количество равно 2 (хотя идентификатор продукта 2 появляется дважды.

Когда я запускаю свой код ниже, я получаю счет 1 вместо 2. Что я мог упустить,пожалуйста?

Примечание: в этом случае я пользователь всего один пользователь

Контроллер

public function dashboard()
{
    $products = Products::orderBy('created_at', 'desc')
        ->where('user_id', Auth::user()->id)->get();

    $get_products_id = [];

    foreach($products as $product){

        $get_products_id[] = $product->id;
    }

    $implode_data = implode(',',$get_products_id);


    $count_existing_products = 
        Invite::where('product_id',$implode_data)
            ->where('user_id', Auth::user()- >id)->get()->count();

    return view('dashboard', compact('count_existing_products'));

}

Вид

<h1>{{count_existing_products}}}</h1>

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Нет необходимости использовать имплозу.вы можете использовать whereIn вместо where.

Invite::whereIn('product_id',$get_products_id)
              ->where('user_id', Auth::user()- >id)->get()->count();
0 голосов
/ 12 июня 2018

Для WHERE IN предложение laravel использует специальный метод whereIn(), в котором вы передаете массив , а не строка .Итак, ваш запрос становится:

Invite::whereIn('product_id', $get_products_id)
    ->where('user_id', Auth::user()->id)
    ->distinct()         // added `distinct` call to get distinct values
    ->get()
    ->count();

Если distinct не работает, попробуйте groupBy:

Invite::whereIn('product_id', $get_products_id)
    ->where('user_id', Auth::user()->id)
    ->groupBy('product_id')
    ->get()
    ->count();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...