我有以下代码:
Incident::where('id','<','35')->with('priority')->paginate(15);
现在返回以下内容: ID,标题,描述,priority_id和优先级对象。
我想只检索ID,标题和优先级对象,没有说明,也没有priority_id,但我希望它们按特定顺序排列,如下所示: ID,优先级和标题。
但是当我做以下事情时:
Incident::where('id','<','5')->with('priority')->paginate(15, array('id', 'priority', 'title'));
我收到一条错误消息,指出未找到列事件。优先级。
当通过FK引用其中一列时,有没有办法只选择我想要的列和我想要的顺序?
谢谢!
答案 0 :(得分:0)
您不需要在列表中加入priority
:
Incident::where('id','<','5')->with('priority')->paginate(15, array('id', 'title'));
答案 1 :(得分:0)
如果您将回调传递给with
方法,则可以指定顺序:
Incident::where('id','<','35')
->with(['priority' => function ($query) {
$query->select('id', 'priority', 'title');
}])
->paginate(15);
答案 2 :(得分:0)
您的查询不是加入。 with('priority')
实际上是在Incident
查询之后执行的第二个单独查询,然后附加到Incident
模型。如果您想引用列并使用连接,您可以这样做:
Incident::select('id', 'priorities.*', 'incidents.title')
->leftJoin('priorities', 'priorities.id', '=', 'incidents.priority_id')
->where('incidents.id', '>', '5')
->paginate(15);
如果您不想使用上述内容,那么@tam答案最好,但请确保他的解决方案将id
包含在子查询回调中,因为这是关系如何附加到查询运行后的父模型。