Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
641 views
in Technique[技术] by (71.8m points)

php - How to create query with twice a connection to a table in Laravel 5.3?

I need get two city names with one query:

For example:

City table:

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

In Model: from_city is THR and to_city is 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;
}

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!

How to create this query?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

you can also use the eloquent model with defining the relationship.

Also for more detail visit https://laravel.com/docs/5.3/eloquent-relationships

crate two model -- 1st is "Flights"

<?php


class Flights extends Model
{
    protected $table = 'flights';

    /**
     * Get the From City detail.
     */
    public function fromCity()
    {
        return $this->hasOne('AppModelsCity', 'Pana', 'from_city');
    }

    /**
     * Get the To city state.
     */
   public function toCity()
   {
        return $this->hasOne('AppModelsCity', 'Pana', 'to_city');
   }

}

2nd Model is "City"

<?php
class City extends Model
{
    protected $table = 'city';
}

Now for fetching

Flights::where(id, $id)->with('toCity', 'fromCity')->get();

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...