2015-10-13 26 views
0

我有3個表:Laravel多對多獲取字段兩個表

  1. 類型型號:ID,姓名,蛞蝓等
  2. GenreStation型號:ID,genre_id,station_id。
  3. 站模式:ID,姓名,蛞蝓,標識等

我試圖獲得通過流派蛞蝓從電臺表失調和極限參數數據。但我也想用這個語句來抓取流派名稱:

Genre::slug($genreSlug) 
     ->first() 
     ->stations() 
     ->skip($offset) 
     ->take($limit) 
     ->get([ 
      'genres.name as genre_name', 
      'stations.id', 
      'stations.name', 
      'stations.slug', 
      'stations.stream_url', 
      'stations.logo', 
      'stations.media_type', 
      'stations.bit_rate', 
      'stations.listeners', 
      'stations.status', 
     ]); 

,我發現了以下錯誤:

"Illuminate\Database\QueryException","message":"SQLSTATE[42S22]: Column not found: 1054 Unknown column 'genres.name' in 'field list' (SQL: select genres . name as genre_name , stations . id , stations . name , stations . slug , stations . stream_url , stations . logo , stations . media_type , stations . bit_rate , stations . listeners , stations . status , genre_station . genre_id as pivot_genre_id , genre_station . station_id as pivot_station_id , genre_station . created_at as pivot_created_at , genre_station . updated_at as pivot_updated_at from stations inner join genre_station on stations . id = genre_station . station_id where genre_station . genre_id = 1 limit 15 offset 0)","file":"/home/vagrant/Projects/MuzzaLife/vendor/laravel/framework/src/Illuminate/Database/Connection.php","line":625

沒有genre.name場一切正常。我怎麼解決這個問題?

回答

1

在SQL查詢中,您已經可以看到發生了什麼問題。可能第一個查詢會給你的類型,但後來一個新的查詢是爲電臺,他們是基於genre_station表。您沒有來自genres表的任何信息,所以您應該添加此信息。

您可以通過添加一個連接到查詢做.. http://laravel.com/docs/5.1/queries#joins

還是先保存類型在一個單獨的變量,並得到了站以後。

$genre = Genre::slug($genreSlug)->first(); 
$stations = $genre->stations() 
    ->skip($offset) 
    ->take($limit) 
    ->get([ 
     'stations.id', 
     'stations.name', 
     'stations.slug', 
     'stations.stream_url', 
     'stations.logo', 
     'stations.media_type', 
     'stations.bit_rate', 
     'stations.listeners', 
     'stations.status', 
    ]); 
+0

這是爲我工作,但我試圖用1查詢來解決這個問題,以逃避合併流派和工作站對象。 – Viktor

+0

我認爲你的解決方案已經在水中使用了2個查詢,但爲了得到想要的結果,你還可以添加一個像' - > join('genres','genre_station.genre_id','=','genres.id')的連接。 ',這應該在' - > stations()' –

+0

後面''>站點()'後使用連接解決了問題。我不確定這個變體的優秀性,但它工作正常。謝謝你的幫助! – Viktor