我有一个名为“Offers”的表,其中包含 3 种(公共(public)、请求、私有(private))类型的数据。现在我想直接向用户终端公众展示并请求报价。私有(private)优惠不会显示,但当管理员将在新表 (offer_access) 中添加 user_id 和 offer_id 时,私有(private)优惠应该仅对这些用户可用。
$offer = Offer::where('status', 'public')->orWhere('status', 'request')->latest()->get();
我写了这篇文章,并为用户端获得了公开和私有(private)报价。现在我想在“OfferAccess”表上可用时向用户显示私有(private)优惠。
那么现在,我该如何编写 SQL 查询呢?
最佳答案
你可以试试吹:
$offer = Offer::whereIn('status', ['public', 'request'])
->orWhere(function($query) {
$query->where('status', 'private')
->whereHas('OfferAccess', function($qry) {
$qry->where('user_id', auth()->user()->id);
});
})->get();
如果您只需要最新的结果可以使用->latest()->get()
而不是只使用->get()
。
此外,如果您需要为当前登录用户以外的任何其他用户获取它,则需要将 user_id
传递给闭包函数。所以你需要使用更新的 orWhere
就像:
->orWhere(function($query) use ($user_id) {
$query->where('status', 'private')
->whereHas('OfferAccess', function($qry) use ($user_id) {
$qry->where('user_id', $user_id);
});
})
它应该会给你想要的结果。
关于mysql - Laravel SQL 查询。帮我,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59009937/