试图避免Select语句中的子查询:Laravel 5.1

时间:2015-12-23 21:29:15

标签: php laravel-5 eloquent laravel-5.1 laravel-query-builder

我使用的是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。这似乎是select语句中的子查询。如果' WhoCreatedTheProject value does not match in the database ? I meant I am looking for Inner Join`,是否有任何方法可以返回整体没有记录。

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

1 个答案:

答案 0 :(得分: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中的表格名称以匹配您的值。

但回答这个问题,在你的例子中,任何子查询都不会被运行。您将获得所有项目出价(这是第一个查询),稍后在单独的查询中,您将获得此出价的所有项目WhoCreatedTheProject = 16(这是第二个查询)。所以你展示的东西与你想要达到的东西不同。