2017-07-25 97 views
1

我想從拉拉維爾的mysql上取得房屋清單和房屋圖片。但是,我有這個問題。使用下面的過程:如何從Laravel獲取控制器中的查詢結果ID?

$houses = Houses::query() 
      ->orderBy('sort', 'ASC') 
      ->take('6') 
      ->get(); 

此查詢,給我的房子名單。我需要用我檢索得到他們的照片的房子,這是我能想到的最好的:

$pictures = Housephotos::query() 
      ->where('house_id', '=', $houses->house_id) 
      ->get(); 

問題一:這個過程是正確的?
問題二:如何做到這一點?

+0

你的問題是這樣的嗎? –

+1

'$ houses'是'House'對象的'Collection',所以'$ houses-> house_id'是無效的。你應該定義一個'Houses'和'Housephotos'之間的關係,然後使用'Houses :: with([「Housephotos」]) - > where(...) - > get();'獲得每個'House'和它是'Housephoto'(單個或多個,取決於關係)。查看https://laravel.com/docs/5.4/eloquent-relationships瞭解更多信息。 –

+0

_「我怎樣才能寫出我的項目?」_如果有一個網站,您可以免費索取並獲得完整的源代碼! –

回答

0

您需要在HousephotosHouse之間建立關係,以便Housephotos中有house_id。如果這是真的,你已經可以使用的房屋編號,你必須獲取房屋編號:

說你已經擁有的房子,那麼你可以有:

$pictures = Housephotos::whereIn('house_id', '=', $houses->pluck('id')->toArray()) 
     ->get(); 

這會給你的房屋照片。

0

的關係添加到房屋:

class Houses extends Model 
{ 
    public function photos() 
    { 
     return $this->hasMany(Housephotos::class); 
    } 
} 

,現在你可以很容易地得到這些照片,如:

$houses = Houses::query() 
      ->orderBy('sort', 'ASC') 
      ->take('6') 
      ->get(); 

foreach ($houses->photos as $photo) { 
    echo $photo->id; 
} 

與問題,選擇查詢將運行n次(5次這個例子)。

如果添加with到查詢然而,然後laravel將運行一個單一in查詢來獲取圖片:

$houses = Houses::query() 
      ->with('pictures') 
      ->orderBy('sort', 'ASC') 
      ->take('6') 
      ->get(); 
+0

感謝您的回答@madpoet。但我有一個問題。首先;當我這樣做: '$ houses = Houses :: query() - > with('pictures') - > orderBy('sort','ASC') - > take('6') - >獲得();' 這樣的錯誤發生的歷史:'欄未發現:在1054未知列「houses_pictures.houses_id」 ......'但是,在houses_pictures表,有沒有這樣的列。但是,'house_id'存在... 第二,如果我喜歡做如上,我怎麼能傳遞數據查看,用'foreach' –

+0

請閱讀[文件](https://laravel.com/文檔/ 5.4 /口才,關係#一到多)。你可以定義外鍵名稱,比如'$ this-> hasMany(Housephotos :: class,'houses_id')'。如果遵循這些慣例,你會遇到更少的麻煩:''房屋'應該是'House'。您可以通過$房屋查看並在模板內使用@foreach進行循環。 – madpoet

相關問題