2015-01-14 106 views
2

我有兩個模型關係的hasMany型號:laravel得到與where子句

播放列表圖片

播放列表可以有很多圖片。 一張圖片屬於播放列表。

在表格圖像中,我還創建了一個名爲「位置」的列,其中可以包含整數的 。

在Playlist.php

public function images(){ 
    return $this->hasMany('Image'); 
} 

在Image.php:

public function playlist(){ 
    return $this->belongsTo('Playlist'); 
} 

我選擇一個播放列表型號:

$playlist = Playlist::with('images')->find($id); 

問:

如何從具有特定位置的$ $播放列表中選擇圖像,例如位置1? 我想要加載控制器中的所有圖像(以查看所有位置的所有圖像),但在視圖中我想選擇一個具有特定位置的圖像。

有了:

$playlist->images 

我得到的所有相關圖片,但我只希望這在位置欄中有一個「1」的形象。

編輯:

我得到了這個解決方案:

在播放列表中創建一個新的功能:

public function imagePosition($position) { 
    return $this->hasMany('Image')->wherePosition($position)->first(); 
} 

現在,我可以在我看來與是否選擇該圖像:

{{$playlist->imagePosition(1)->id}} 

這是最好的方法嗎?

回答

1

使用急切的加載約束,如此;

$playlist = Playlist::with(array('images' => function ($query){ 
     $query->where('position', 1); 
    }))->find($id); 

這將加載播放列表與自己的形象,但只有有1

的位置上的人,但如果你希望所有的圖像,你可以重新查詢,像這樣的結果關係;

$playlist->images()->where('position', 1)->first(); 
+0

是的,這是一個好辦法..但我的問題是,我想加載控制器的所有圖像(將所有的所有圖像在視圖中的位置),但在視圖中,我想選擇一個具有特定位置的圖像......爲模棱兩可的描述做準備。 – goldlife

+0

@goldlife修正答案。 –

+0

感謝這似乎工作。 – goldlife

1
$users = Playlist::with(array('images' => function($query) 
{ 
    // the condition that will be apply on the with relation 

}))->find($id); 

看到here在「貪婪加載約束」的段落