我试图排除查询。
共有4个表:
现在,在第一个查询中,我要使用参数值&#34来询问具有列(plaza_type)的出版物;最佳"
但是,我也想要,从第一个查询中排除:已购买的出版物(第二个查询)。但购买的出版物是指创建货件(表格)并创建订单(表格)并且状态为"有效","部分","已发送&# 34;,"收到"。
我有两个数组:
$eliteBooks = BookPublication::join('parameter_values', 'published_books.plaza_type', '=', 'parameter_values.id')
->select('published_books.*')
->where(function($query) use($then, $now)
{
$query->whereBetween('published_books.created_at', [$then, $now])
->where('parameter_values.pvalue', '=', 'best');
})
->orderBy('published_books.created_at', 'desc')->take(12)
->get()->chunk(6)->map(function($value)
{
return $value->chunk(3);
});
第二个
$recentBoughtExchanged = BookPublication::join('shipments', 'published_books.id', '=', 'shipments.published_book_id')
->join('orders', 'shipments.order_id', '=', 'orders.id')
->join('parameter_values', 'orders.order_status', '=', 'parameter_values.id')
->select('published_books.*')
->where(function($query) use($then, $now)
{
$query->whereBetween('orders.created_at', [$then, $now])
->where('parameter_values.pvalue', '=', 'valid')
->orWhere('parameter_values.pvalue', '=', 'partial')
->orWhere('parameter_values.pvalue', '=', 'sent')
->orWhere('parameter_values.pvalue', '=', 'received');
})
->groupBy('published_books.id')
->orderBy('orders.created_at', 'desc')
->get()->chunk(6)->map(function($value)
{
return $value->chunk(3);
});
有任何帮助吗?我想从第一个中排除第二个结果,以便只显示可以购买的出版物。
答案 0 :(得分:0)
解决方案在查询中添加filter
:
$eliteBooks = BookPublication::join('parameter_values', 'published_books.plaza_type', '=', 'parameter_values.id')
->select('published_books.*')
->where(function($query) use($then, $now)
{
$query->whereBetween('published_books.created_at', [$then, $now])
->where('parameter_values.pvalue', '=', 'best');
})
->orderBy('published_books.created_at', 'desc')->take(12)
->get()->filter(function($publication) {
return $publication->can_be_bought;
})->chunk(6)->map(function($value)
{
return $value->chunk(3);
});
$ publication在模型BookPublication中定义, can_be_bought 在定义的方法中定义。