Laravel 4查询生成器(加入)

时间:2014-10-11 13:53:12

标签: php mysql laravel

我的数据库中有这些表,即" airport" " route","机场"的ID是" route"中的外键(即原点,目的地)。

Airport
+-------+-------------+-----------------------+
|  id   | airportcode |  Location             | 
+-------+-------------+-----------------------+
|   1   |   CEB       | Cebu                  | 
|   2   |   MAN       | Manila                |
+-------+-------------+-----------------------+

Routes
+-------+-------------+-----------------------+
|   id  | Origin      |  Destination          | 
+-------+-------------+-----------------------+
|   1   |   1         | 2                     | 
|   2   |   2         | 1                     |
+-------+-------------+-----------------------+

到目前为止,这是我在Controller中的查询,它只返回" Origin,Destination"

DB::table('airport')
    ->join('route', 'airport.id','=','route.Origin')
    ->join('route', 'airport.id','=','route.Destination')
    ->select('route.Origin', 'route.Destination')
    ->get();

我想做的是:

SELECT 'airport.Location' from airport, route WHERE 'route.Origin' = 'airport.id' AND 'route.Destination' = 'airport.id"

任何建议都可以!

2 个答案:

答案 0 :(得分:0)

那么 - 您想要为特定机场ID提取模型,但前提是它是否到达指定目的地?

您的第一个查询只返回两个列,就像您告诉它返回的那样

您可以通过以下方式轻松抵达机场:

Airport::find($id);

其中$ id是来自用户输入的id,例如,应该是键。 Find将返回一个集合

你也可以这样做:

Airport::where('id','=', $id)->first() //will return the first record - you could also use ->get() to return a collection

然后,如果您在机场模型中加入了 - >> hasMany,那么您可以这样做:

Airport::where('id','=', $id)
    ->with('routes')
    ->get()

将返回机场并附上相关路线模型

然后,您可以进一步采用该阶段,并通过以下方式查询关系:

Airport::find($id)->routes()->where('destination','=',$dest_id);

我认为只要您在模型中正确创建关系

,就可以做到这一点

答案 1 :(得分:0)

如果您使用选择查询,请确保您已提及所需的所有字段...

it's only returning the "Origin, Destination",因为您在选择查询中仅提到了这两个。

尝试类似......

DB::table('route')
   ->select('route.Origin', 'route.Destination','airport.Location')
   ->leftjoin('airport',  function($join)
                        {
                            $join->where('airport.id',array('route.Origin','route.Destination'));   
                         // I haven't used it, if any errors pls comment
                        })

   ->get();

希望这可以帮助你...