2017-07-19 117 views
0

這是我的代碼:laravel篩選關係條件whereHas與功能有問題

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'=>函數($ 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

+0

我希望我的JSON是 https://docs.google.com/document/d/1nYKXav7qriJnLIkutmETRmn519lJanwYVdJqTyjuSFw/edit?usp=sharing –

+0

考慮使用一個連接,並寫上自主查詢的WHERE條件,而不是使用與 – haakym

+0

我想,但混淆,爲什麼有或無法做到這一點 –

回答

0

你說:

我很努力,但迷惑,爲什麼有或whereHas不能做它

我不是100%確定的,但是我認爲當你平時在with()條件您正在修改子查詢,而不是在主要查詢條件 - 這是否有道理?

如果你想獲得一個更好的主意,請嘗試通過您的查詢運行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輸出。

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 
+0

我解決了它,謝謝~~~ –