我需要用一个查询得到两个城市名:
例如:
城市表:

+---------+----------+
|  Pana   |   Name   |
+---------+----------+
|   THR   |  Tehran  |
|   LON   |  London  |
+---------+----------+

模型中:从城市是THR,到城市是LON
public function scopePrintQuery($query, $id)
{
    $join = $query
        -> join('cities', 'cities.pana', 'flights.from_city')
        -> join('cities', 'cities.pana', 'flights.to_city')
        -> where('flights.id', $id)
        ->get([
            'flights.*',
            'cities.name as from_city'
            ??? for to_city?
        ]);
    return $join;
}

现在,我需要在这个查询中得到from_city name和to_city name。
查询不适用于一个表中的两个联接!
如何创建此查询?

最佳答案

使用直接SQL,您可以给每个连接的表一个别名—例如。

SELECT flights.*
FROM flights as f
 JOIN cities as fromCity on fromCity.pana = f.from_city
 JOIN cities as toCity on toCity.pana = f.to_city
WHERE f.id = 3 --

对于雄辩,使用select()指定选择字段。还可以使用DB::raw()来使用原始SQL(例如,为DB::raw('cities as toCity')这样的表提供别名)。
public function scopePrintQuery($query, $id)
{
  $join = $query
    -> join(DB::raw('cities as fromCity'), 'fromCity.pana', 'flights.from_city')
    -> join(DB::raw('cities as toCity'), 'toCity.pana', 'flights.to_city')
    -> where('flights.id', $id)
    ->select([
        'flights.*',
        DB::raw('fromCity.name as from_city')
        DB::raw('toCity.name as to_city')
    ]);
    return $join->get();
}

关于php - 如何在Laravel 5.3中创建与表的两次连接的查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42515089/

10-16 08:25
查看更多