2016-11-08 23 views
0

我有一個模型的關係,我需要在我的控制器上延遲加載,但我需要使用原始模型的屬性來執行查詢約束。 所以我有這樣的:

$Users = User::all(); 
$Users->load(['disputes' => function($query){ 
$query->where('property', $this->property); 
}]); 

但它返回未定義的屬性$ account_number_tu。 如何確保$ this在執行load()時引用$ Users中的每個$ User? 我試圖做模型中的這個約束,但是

$this->property; 

返回null。

回答

1

引擎蓋下,load()User模型初始化Builder的一個實例,然後通過你傳遞給load對建設者的with方法PARAMS。有了這個,您可以使用load方法完成所有操作,您可以使用with方法完成所有操作。

要回答你的問題,你可以這樣做:

$Users = User::all(); 
$Users->load(['disputes' => function($query) { 
    return $query->select('disputes.*') 
     ->leftJoin('disputes', 'disputes.user_id', '=', 'users.id') 
     ->whereRaw('users.property = disputes.property'); 
}]); 

這將是相同的:

$Users = User::with(['disputes' => function($query) { 
    return $query->select('disputes.*') 
     ->leftJoin('disputes', 'disputes.user_id', '=', 'users.id') 
     ->whereRaw('users.property = disputes.property'); 
}]); 
+0

所以糾紛是另一個表,例如,如果用戶有一個被叫電話的產業我也做whereRaw('disputes.phone'= users.phone'); ? – jsrosas

+0

正確。在'users'和'dispute'是表名的情況下(如果不是,那麼將這些表與具有前綴的實際表名交換)。 –

+0

我實際試圖查詢的表的名稱是'糾紛'和'score_aware_disputes_accounts'。這些都是MySQL中顯示的名稱,但我一直收到錯誤列找不到。我在做我的查詢whereRaw('disputes.account_id = score_aware_disputes_accounts.id'); – jsrosas