如何从Laravel获取控制器中的查询结果ID?
我想从拉拉维尔的mysql上取得房屋清单和房屋图片。但是,我有这个问题。使用下面的过程:如何从Laravel获取控制器中的查询结果ID?
$houses = Houses::query()
->orderBy('sort', 'ASC')
->take('6')
->get();
此查询,给我的房子名单。我需要用我检索得到他们的照片的房子,这是我能想到的最好的:
$pictures = Housephotos::query()
->where('house_id', '=', $houses->house_id)
->get();
问题一:这个过程是正确的?
问题二:如何做到这一点?
您需要在Housephotos
和House
之间建立关系,以便Housephotos中有house_id。如果这是真的,你已经可以使用的房屋编号,你必须获取房屋编号:
说你已经拥有的房子,那么你可以有:
$pictures = Housephotos::whereIn('house_id', '=', $houses->pluck('id')->toArray())
->get();
这会给你的房屋照片。
的关系添加到房屋:
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();
感谢您的回答@madpoet。但我有一个问题。首先;当我这样做: '$ houses = Houses :: query() - > with('pictures') - > orderBy('sort','ASC') - > take('6') - >获得();' 这样的错误发生的历史:'栏未发现:在1054未知列“houses_pictures.houses_id” ......'但是,在houses_pictures表,有没有这样的列。但是,'house_id'存在... 第二,如果我喜欢做如上,我怎么能传递数据查看,用'foreach' –
请阅读[文件](https://laravel.com/文档/ 5.4 /口才,关系#一到多)。你可以定义外键名称,比如'$ this-> hasMany(Housephotos :: class,'houses_id')'。如果遵循这些惯例,你会遇到更少的麻烦:''房屋'应该是'House'。您可以通过$房屋查看并在模板内使用@foreach进行循环。 – madpoet
你的问题是这样的吗? –
'$ houses'是'House'对象的'Collection',所以'$ houses-> house_id'是无效的。你应该定义一个'Houses'和'Housephotos'之间的关系,然后使用'Houses :: with([“Housephotos”]) - > where(...) - > get();'获得每个'House'和它是'Housephoto'(单个或多个,取决于关系)。查看https://laravel.com/docs/5.4/eloquent-relationships了解更多信息。 –
_“我怎样才能写出我的项目?”_如果有一个网站,您可以免费索取并获得完整的源代码! –