2014-09-29 156 views
0

在經典的Rest API方法中,我的應用程序需要檢查用戶是否與某個帳戶相關。我們可以對多個帳戶執行操作,因此查詢會在每個請求中執行。 由於這是我們最常稱的查詢,所以輕便對我的安寧至關重要。什麼是Laravel的關於最輕量級查詢的雄辯搜索?

當前的查詢,使用機鋒

$user-> accounts()-> where($primaryKey, $id); 

不知何故,這些都產生錯誤(雄辯的錯誤?)

$user-> accounts()-> find ($id); 
$user-> accounts()-> where ($primaryKey, $id)->count(); 

錯誤: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'a_id' in where clause is ambiguous (SQL: select * from 'accounts' inner join 'users_accounts' on 'accounts'.'a_id' = 'users_accounts'.'a_id' where 'users_accounts'.'u_id' = 1 and 'a_id' = 1 limit 1)

回到我的問題,是有一個更優雅的解決方案,然後「where」功能?

回答

0

如果這是您最常用的查詢之一,爲何不緩存它?

$user->accounts()->where($primaryKey, '=', $id)->remember(60)->get(); 

所提到的查詢失敗,因爲這兩個表中具有相同名稱的列

where 'users_accounts'.'u_id' = 1 and 'a_id' = 1 
+0

緩存確實下一步,歡呼聲提醒。關於查詢,那個是由Eloquent生成的,我知道它在哪裏失敗,然而我不確定爲什麼Eloquent會生成一個失敗的查詢。儘管如此,我不得不糾正你對最後一句話的意見。在哪裏(列,值)是允許的:http://laravel.com/docs/4.2/queries – 2014-09-29 10:12:39

+0

是的,你是正確的,我總是使用這個參數的明確聲明,因爲它看起來更清晰。 – 2014-09-29 10:30:53

+0

你介意可靠地更新答案的語法部分嗎?只是爲了不混淆其他讀者。 – 2014-09-29 13:19:11