我知道在我的模型中,我可以像这样对表进行别名:
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/