2014-02-12 106 views
3

這時候在指定的列是一個後續帖子:Laravel 4 and Eloquent: retrieving all records and all related recordsLaravel和雄辯:檢索相關項目

給出的解決方案的偉大工程:

$artists = Artist::with('instruments')->get(); 
return \View::make('artists')->withArtists($artists); 

它還適用於剛:

$artists = Artist::get(); 

現在我試圖指定兩個表返回的確切列。我在上面和在我的課的語句中使用select()試過了,是這樣的:

ArtistController.php

$artists = Artist::select('firstname', 'lastname', 'instruments.name')->get(); 

或:

$artists = Artist::with(array('instruments' => function($query) { 
    $query->select('name'); 
}))->get(); 

(如建議here同時這不會引起錯誤,它也不會將列限制爲僅指定那些列)

Artist.php

return $this->belongsToMany('App\Models\Instrument')->select(['name']); 

我將如何去獲得只是firstnamelastname列從artists表和instrumentsname列?

+1

你的問題是你必須加載主鍵和外鍵。否則,ORM無法加載你的關係。 –

+0

@JosephSilber您的評論幫助了我!所以,在知識中生活愉快,你已經幫助至少一個人發展了! :] – Azirius

回答

3

不知道我在想什麼。我認爲,這麼長時間的工作讓我有了獨眼。

無論如何,我仔細研究了這個問題並搜索了答案,最後在GitHub上發佈了一個問題。

底線是而不是可能的Laravel v4.1。

https://github.com/laravel/laravel/issues/2679

這解決了這個問題:

Artists.php

public function instruments() { 
    return $this->hasMany('App\Models\Instrument', 'id'); 
} 

注意,我從一個belongsToMany這讓我更有意義的改變了這種爲hasMany音樂家(或Artist)會有許多Instrument他們玩和Instrument可能屬於很多Artist s(我在前面提到的問題中也提到過)。我還必須在我的模型中指定'id'列,該列告訴ORM instrument.id匹配artist_instrument.id。這部分讓我感到困惑,因爲我認爲hasMany的訂單是foreign_key,primary_key,但也許我正在考慮向後。如果有人能解釋一點,我會很感激。

總之,該解決方案的第二部分...

ArtistsController.php,我這樣做:

$artists = Artist::with(array(
    'instruments' => function($q) { 
     $q->select('instruments.id', 'name'); 
    }) 
)->get(array('id', 'firstname', 'lastname')); 

這給了我正是我想要的是藝術家的集合其中僅包含播放的每個樂器的 firstnamelastname列以及 artists表和 name列。

+0

「當前不支持限制belongsToMany關係中的列。」 –

2
$artists = Artist::with(array('instruments' => function ($query) { 
    $query->select('id', 'name'); 
}))->get('id', 'firstname', 'lastname'); 
+0

這會引發錯誤,說明「id」列不明確。如果我這樣做:'instruments.id'和'artists.id',那麼它不會失敗,但它不會限制列。在這種情況下,'instruments.id'是'artist_instrument'中'instrument_id'的外鍵,'artists.id'是'artist_instrument'中'artist_id'的外鍵。 – tptcat