2017-07-25 59 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

相关问题