Laravel 5.1内部联接查询中的问题


Issue in Laravel 5.1 Inner Join Query

以下是我在Laravel 5.1中的查询

'App'Models'Project'Bids'ProjectBid_Model
::selectRaw('B.*')
->join('tblproject P','B.projectid','=','P.projectid')
->where('P.WhoCreatedTheProject',14)
->first()

和以下是等价的查询

select B.* from `tblprojectbid` 
inner join `tblproject P` on `B`.`projectid` = `P`.`projectid` 
where `P`.`WhoCreatedTheProject` = 14 limit 1

出了什么问题

请检查查询中的第1行:select B.* from tblprojectbid

问题是什么

如何更改

select B.* from tblprojectbid

select B.* from tblprojectbid B

如果你想使用Eloquent,恐怕没有简单的方法。

在这种情况下,我使用完整的表名作为模型,例如

'App'Models'Project'Bids'ProjectBid_Model
::selectRaw('bid_table.*')
->join('tblproject AS P','bid_table.projectid','=','P.projectid')
->where('P.WhoCreatedTheProject',14)
->first()

然而,也有可能在ProjectBid_Model:中设置别名

protected $table = 'bid_table AS B';

问题是,这个表总是用B别名,所以如果你有两个具有相同别名的模型(在这种情况下是B),你以后就不能只为一个表更改它,所以我认为最好是第一种方法(不使用别名)

这是最终解决方案

'App'Models'Project'Bids'ProjectBid_Model
    ::selectRaw('B.*')
    ->from('tblprojectbid as B')
    ->join('tblproject as P','B.projectid','=','P.projectid')
    ->where('P.WhoCreatedTheProject',14)
    ->first()

试试这个。

'DB::table('tblprojectbid as B')
->select()
->join('tblproject as P','B.projectid','=','P.projectid')
->where('P.WhoCreatedTheProject',14)
->first()