Спасибо. Йонас-Стауденмейр. Он помогает мне найти решение.
В этом случае мы можем использовать метод selectSub()
из класса построителя запросов laravel. selectSub ()
Для первого:
$user_email = DB::table('user_detail')
->select('user_detail.user_email')
->whereRaw('user_detail.user_id = user.id')
->take(1);
$data = DB::table('user')
->select('name', 'age')
->selectSub($user_email, 'email') // selectSub(sub_query, as)
->get();
Для второго:
//session query
$session = DB::table('session')
->select('session.name')
->whereRaw('transaction.session_id = session.id')
->take(1);
//from_account query
$from_account = DB::table('account')
->select('account.name')
->whereRaw('transaction.from_account_id = account.id')
->take(1);
//to_account query
$to_account = DB::table('account')
->select('account.name')
->whereRaw('transaction.to_account_id = account.id')
->take(1);
//action query
$action = DB::table('action')
->select('action.action_name')
->whereRaw('transaction.action_table_id = action.id')
->take(1);
//another_table query
$another_table = DB::table('another_table')
->select('another_table.detail')
->whereRaw('transaction.another_table_id = another_table.id')
->take(1);
$data = DB::table('transaction')
->select('transaction.id as transaction_id', 'other_attributes')
->selectSub($session, 'session_name') //session as session_name
->selectSub($from_account, 'from_account_name') //from_account as from_account_name
->selectSub($to_account, 'session_name') //to_account as to_account_name
->selectSub($action, 'action_name') //action as action_name
->selectSub($another_table, 'another_table_detail') //another_table as another_table_detail
->get();
Хотя мы можем использовать соединение или левое соединение. Какой из них быстрее, все зависит от данных, индексов, корреляции, количества данных, запросов и т. Д. Подзапросы могут быть медленнее, чем LEFT [OUTER] JOINS, но, на мой взгляд, их сила немного выше читаемости. нарисуй против-суб-запроса
Необходимо сделать ключ реестра для сообщения Visual Studio который папки показать блоки для. Эта статья объясняет, как сделать это:
http://www.platinumbay.com/blogs/dotneticated/archive/2008/09/02/add-reference-and-the-gac.aspx
Мы больше не используем GAC, поскольку это - громоздкий процесс, который не приносил пользу нашим членам команды. Мы решаем последовательные проблемы пути с помощью ссылок проекта для наших собственных блоков. Сторонние блоки входят в папку в решении, и мы ссылаемся на блоки в проектах оттуда. Таким образом, у всех есть они в том же пути без забот.
Это - вероятно, VFAQ, даже при том, что я являюсь довольно новым здесь. Фундаментальное понятие здесь - то, что список блоков загружается на основе установки в Реестре.
Все, что необходимо сделать, должно добавить подраздел реестра, который указывает на местоположение блока под следующим ключом:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders\
Если MyAssemblyFolder является названием Вашей папки, где Ваш блок, который будет добавлен, находится, создайте подраздел с любым именем и в нем, добавьте Строковый ключ с полным путем к Вашему MyAssemblyFolder.
Необходимо добавить ключ реестра как:
[HKEY_CURRENT_USER\SOFTWARE\Microsoft. NETFramework\AssemblyFolders\MyAssemblies] @= "C:\MyAssemblies"
Вы видите больше на этом в: http://support.microsoft.com/kb/306149
Я создал совершенно бесплатный инструмент , что поможет вам в достижении вашей цели. Muse VSReferences позволит вам добавить ссылку на глобальный кэш сборок для проекта из пункта меню Добавить ссылку GAC .
С уважением,
Muse VSExtensions