【问题标题】:Issue in Laravel 5.1 Inner Join QueryLaravel 5.1 内部联接查询中的问题
【发布时间】:2016-03-30 09:51:25
【问题描述】:

以下是我在 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

【问题讨论】:

    标签: php sql laravel-5 eloquent laravel-5.1


    【解决方案1】:

    试试这个。

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

    【讨论】:

    • 你可以使用Model 更改它吗,因为我还必须在查询中使用with 语句。
    【解决方案2】:

    这是最终解决方案。

    \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()
    

    【讨论】:

    • 我需要在我的应用程序中验证它。我在使用 Eloquent 时没有使用过from
    【解决方案3】:

    如果你想使用 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 为该表提供别名,因此如果您有 2 个具有相同别名的模型(在本例中为 B),您以后将无法仅将其更改为一个表,所以我认为第一种方法更好(不使用别名)

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多