我在名为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>
答案 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();