Попытка избежать подзапроса в операторе выбора: Laravel 5.1

Я использую Laravel 5.1. ниже мой запрос к базе данных

\App\Models\Project\Bids\ProjectBid_Model
::with(['Project' => function($query){
$query->where('WhoCreatedTheProject', 16);
}])
->where('ProjectBidID', 1)
->where('FreelancerAwardedProjectStatusID', \App\ProjectStatus::InProgress)
->first()

Какой вопрос ?

В приведенной ниже части, если записи не существует, Project Object будет null, Это кажется подзапросом в операторе выбора. Есть ли способ вернуть общее отсутствие записи, если ‘WhoCreatedTheProjectvalue does not match in the database ? I meant I am looking forInner Join`.

::with(['Project' => function($query){
$query->where('WhoCreatedTheProject', 16);
}])

0

Решение

Вы можете сделать это следующим образом (у вас будет один запрос):

\App\Models\Project\Bids\ProjectBid_Model
::selectRaw('projectbid_table.*')
->join('projects_table','projectbid_table.project_id','=','project_table.project_id')
->where('WhoCreatedTheProject',16);
->where('ProjectBidID', 1)
->where('FreelancerAwardedProjectStatusID', \App\ProjectStatus::InProgress)
->first();

Вам, конечно, нужно изменить имена таблиц в join чтобы соответствовать вашим ценностям.

Но, отвечая на вопрос, в вашем примере ни один подзапрос не будет запущен. Вы получаете все заявки на проекты (это 1-й запрос), а позже в отдельном запросе вы получаете все проекты для этих заявок, для которых WhoCreatedTheProject = 16 (это второй запрос). Так что то, что вы показали, это нечто иное, чего вы, вероятно, хотите достичь.

0

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

Других решений пока нет …

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