在不同的表格中计算现有ID - laravel

时间:2018-06-12 12:24:43

标签: php laravel

我在名为products的表格中有两个项目,其中包含ID 1 and 2。有一个名为invite的表格,product_id有外键products

在我的控制器中,我正在尝试计算invite表中存在的产品ID的数量。

例如

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

如上所述,邀请表中存在id 1 and 2。意味着总计数为2(尽管产品ID 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 :(得分:2)

对于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();

答案 1 :(得分:0)

没有必要使用内爆。你可以使用whereIn而不是where。

Invite::whereIn('product_id',$get_products_id)
              ->where('user_id', Auth::user()- >id)->get()->count();