2014-09-29 2 views
0

В классическом подходе к API-интерфейсу Open API мое приложение должно проверить, связан ли пользователь с определенной учетной записью. У нас могут быть действия на нескольких учетных записях, поэтому запрос выполняется по каждому запросу. Поскольку это наш наиболее часто называемый запрос, это легкость важна для моего душевного спокойствия.Что такое красноречивый поиск Ларавеля по отношению к самому светлому запросу?

Текущий запрос, с помощью красноречивых

$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)

Вернуться на мой вопрос, есть ли более элегантное решение, а затем функция «где»?

ответ

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 –

+0

Да, вы правы, я всегда использовал явное объявление этого параметра, поскольку он выглядит более разборчивым для меня. –

+0

Не могли бы вы серьезно изменить синтаксическую часть своего ответа? Только чтобы не путать других читателей. –

Смежные вопросы