laravel过滤器关系条件whereHas和with function有问题

时间:2017-07-19 13:31:33

标签: laravel

这是我的代码:

public function getInvoiceOfTransactioncCompleteItems($userid)
{
  return $user_invoice = 
    $this->model->with([
      'items.itemStatus' => function($q) {
        $q->where('item_statuses_id', '=', '12');
      },
      'items',
      'items.product',
      'items.product.user',
      'items.rating',
      'items.rating_comment'
    ])
    ->where('user_id',$userid)
    ->orderBy('created_at','desc')
    ->paginate(3);
}

我希望它只给我((''items.itemStatus'=> function($ q){             $ Q-化合物其中( 'item_statuses_id', '=', '12');

但它给了我所有的东西,但items.itemStatus列数组是空的,除了item_statuses_id','=','12'

我不想要其他商品,只想要item_statuses_id','=','12'商品

我的json

https://docs.google.com/document/d/1o_V0MRu1somd3rMuzaCtvVY5twhrIBHYfD_N2Fhw9O8/edit?usp=sharing

我的代码 https://docs.google.com/document/d/1YadZmU0Q_OO5himc8JUsFT6vUcZmG4A3D3OjmsG5VdY/edit?usp=sharing

2 个答案:

答案 0 :(得分:0)

你说:

  

我尝试,但是混淆,为什么或者哪些地方不能这样做

我不是百分百肯定,但我认为当您在with()上设置条件时,您正在修改子查询,而不是在主查询上添加条件< / strong> - 这有意义吗?

如果您想获得更好的想法,请尝试通过在查询中运行toSql()来调试您的查询,以便更好地了解正在发生的事情......

$this->model->with([
    'items.itemStatus' => function($q) {
        $q->where('item_statuses_id', '=', '12');
        },
        'items',
        'items.product',
        'items.product.user',
        'items.rating',
        'items.rating_comment'
    ])
    ->where('user_id',$userid)
    ->orderBy('created_at','desc')
    ->toSql();

然后看一下SQL输出。

答案 1 :(得分:0)

I try other method

query order table
user->invoice
invoice ->item
item->itemStatus   condition status =12
get itemStatus 's item id
Item::with('invoice')->whereIn([])

but how can I reverse

it will be 
{
item_id,
invoice:{invoice_id:1}
}
I want be 
{
invoice_id,
items:[{item_id:1,item_id:2}]
}
and invoice same will merge