我知道在我的模型中,我可以像这样对表进行别名:

protected $table = 'territories_sign_in_out AS tsio';


这样我仍然可以使用Eloquent来构建集合,但是当我需要在这样的联接中使用表时该怎么办:

Territories::select('territories.id', 'tsio.signed_out')
           ->join('territories_sign_in_out', function($join) use ($id)
           {
               //
           })
           ->get();


现在我得到一个错误:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error
in your SQL syntax; check the manual that corresponds to your MySQL server
version for the right syntax to use near 'as `tsio`.`publisher_id` = ? order
by `territory_id` asc, `signed_in` asc' at line 1 (SQL: select * from
`territories_sign_in_out` as `tsio` where `territories_sign_in_out` as
`tsio`.`publisher_id` = 59 order by `territory_id` asc, `signed_in` asc)


我会只使用Fluent吗?

DB::table('territories_sign_in_out AS tsio')...


我还希望能够使用Eloquent来构建语句,如下所示:

TerritoriesSignInOut::select('t.id', 't.label', 'tsio.signed_out', 'tsio.publisher_id')
                    ->join('territories AS t', 'tsio.territory_id', '=', 't.id')
                    ->whereNull('tsio.signed_in')
                    ->orderBy('t.label', 'ASC')
                    ->get();


我只能通过添加as tsio来做到这一点,就像我在这个问题的开头提到的那样。

澄清表territories =型号Territories。表territories_sign_in_out =型号TerritoriesSignInOut

最佳答案

您需要使用以下别名:

Territories::select('territories.id', 'tsio.signed_out')
           ->join('territories_sign_in_out as tsio', function($join) use ($id) {
               //...
           })
           ->get();


更清楚地说,我将重新编写代码:

Territories::join('territories_sign_in_out as tsio', function($join) use ($id) {
               //...
           })
           ->select('territories.id', 'tsio.signed_out')
           ->get();

关于php - Laravel 4.x在执行联接时使用Eloquent别名表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25498073/

10-11 03:31
查看更多