Как получить максимальный идентификатор в запросе на присоединение в Laravel 5 (нарушение ограничения целостности :)

Мой запрос таков:

$deals=DB::table('leadsheet')
->join('Deal', 'leadsheet.leadcode', '=', 'Deal.leadcode')
->join('benefits', 'leadsheet.leadcode', '=', 'benefits.leadcode')
->join('delegatedealinfo', 'leadsheet.leadcode', '=', 'delegatedealinfo.leadcode')
->join('vipbooking', 'leadsheet.leadcode', '=', 'vipbooking.leadcode')
->where('id', DB::raw("(select max(`id`) from vipbooking)"))
->where('leadsheet.leadcat', '=','Delegates')

->get();

Итак, у меня есть следующие таблицы:

1.leadsheet
-- leadcode
-- leadcat
2.Deal
-- leadcode
3.benefits
-- leadcode
4.delegatedealinfo
-- leadcode
5.vipbooking
-- leadcode

Я пытаюсь получить максимальный идентификатор vipbooking форма где leadcode такой же, как все leadcode ОТ leadsheet ГДЕ leadsheet,leadcat= Делегаты

Моя единственная проблема MAX ID за vipbooking форма не работает

Кто-нибудь может мне помочь

Update1

после применения решения, предоставленного @anant

ошибка

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous (SQL: select * from `leadsheet` inner join `Deal` on `leadsheet`.`leadcode` = `Deal`.`leadcode` inner join `benefits` on `leadsheet`.`leadcode` = `benefits`.`leadcode` inner join `delegatedealinfo` on `leadsheet`.`leadcode` = `delegatedealinfo`.`leadcode` inner join `vipbooking` on `leadsheet`.`leadcode` = `vipbooking`.`leadcode` where `id` = (select MAX(id) AS vipid from vipbooking) and `leadsheet`.`leadcat` = Delegates)

Перефразируя вопрос

Я хочу получить подробную информацию о форме vipbooking для сделки участника делегата, мы можем узнать, является ли сделка поставщиком или делегатом из таблицы Leadsheet

Обобщающий документ

id | leadcode | leadcat

1  | DL2016012| Delegates
2  | DL2016013| Delegates
3  | VL2016001| Vendors
4  | VL2016002| Vendors

предложения

id | leadcode | DealAmount

1  | DL2016012| 123
2  | VL2016002| 1000
2  | DL2016013| 1200

vipbooking

    id | leadcode | date      | bookingtxt

1  | DL2016012| 20-04-2016| xxx
2  | DL2016012| 20-04-2016| dddd
3  | VL2016012| 21-04-2016| ppp
4  | DL2016013| 20-04-2016| xxx
5  | DL2016013| 22-04-2016| dddd

Так что мой выход должен иметь

 2 123 | Delegates| DL2016012| 20-04-2016| dddd
5 1200| Delegates| DL2016013| 22-04-2016| dddd

Спасибо

2

Решение

Вы можете попробовать с двумя запросами.

$vipBookingMaxId = DB::table('vipbooking')
->select(DB::raw("MAX(`id`) AS maxId"))
->get();
$maxId = (null != $vipBookingMaxId) ? $vipBookingMaxId->maxId : 0;
$dealsQuery = DB::table('leadsheet')
->join('Deal', 'leadsheet.leadcode', '=', 'Deal.leadcode')
->join('benefits', 'leadsheet.leadcode', '=', 'benefits.leadcode')
->join('delegatedealinfo', 'leadsheet.leadcode', '=', 'delegatedealinfo.leadcode')
->join('vipbooking', 'leadsheet.leadcode', '=', 'vipbooking.leadcode');

if ($maxId) {
$dealsQuery->where('id', $vipBookingMaxId->maxId);
}

$deals = $dealsQuery->where('leadsheet.leadcat', '=', 'Delegates')->get();

Я надеюсь, что это поможет вам.

0

Другие решения

Попробуй это

$deals=DB::table('leadsheet')
->join('Deal', 'leadsheet.leadcode', '=', 'Deal.leadcode')
->join('benefits', 'leadsheet.leadcode', '=', 'benefits.leadcode')
->join('delegatedealinfo', 'leadsheet.leadcode', '=', 'delegatedealinfo.leadcode')
->join('vipbooking', 'leadsheet.leadcode', '=', 'vipbooking.leadcode')
->where('leadsheet.id', DB::raw("(select max(`id`) from vipbooking)"))
->where('leadsheet.leadcat', '=','Delegates')

->get();

добавленной leadsheet.id

0

По вопросам рекламы [email protected]