如何在Laravel 5.3中创建与表的两次连接的查询? [英] How to create query with twice a connection to a table in Laravel 5.3?

查看:79
本文介绍了如何在Laravel 5.3中创建与表的两次连接的查询?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要通过一个查询获得两个城市名称:

I need get two city names with one query:

例如:

城市表:

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

在模型中: from_city THR ,而 to_city 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 名称和 to_city 名称.

Now, I need get from_city name and to_city name in this query.

该查询不适用于一个表中的两个联接!

The query does not work with two joins from one table!

如何创建此查询?

推荐答案

使用直接SQL,您可以为每个联接表赋予别名-例如

With straight SQL you could give each joined table an alias - e.g.

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 --

对于Eloquent,使用 select()指定选择字段.也可以使用 DB :: raw()来使用原始SQL(例如,表的别名,如DB::raw('cities as toCity').

With Eloquent, use select() to specify select fields. Also use DB::raw() to use raw SQL (e.g. giving an alias to table like 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();
}

这篇关于如何在Laravel 5.3中创建与表的两次连接的查询?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆