如何按特定顺序返回列和连接列(Eloquent)

时间:2016-11-04 00:05:15

标签: laravel eloquent query-builder

我有以下代码:

    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引用其中一列时,有没有办法只选择我想要的列和我想要的顺序?

谢谢!

3 个答案:

答案 0 :(得分:0)

您不需要在列表中加入priorityIncident::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包含在子查询回调中,因为这是关系如何附加到查询运行后的父模型。