需要一些指导来解决这个问题:
使用api资源的PHP7.2、Laravel5.6
我有一个位置表(位置名称、id等)和一个报告表。一(位置)对多(报告)。我用searchy搜索位置。当我搜索某个位置时,我希望在结果中包含该位置也可用的任何报告。
我相信这是一个很好的连接案例,但是searchy不能做连接,所以我正在努力解决这个问题。如果有更好的办法,我洗耳恭听。顺便说一句,我是新来拉威尔,所以假设我什么都不知道。
$response = Searchy::locations('location_name')->query($query)->get();
// Add reports to array in each location result
foreach($response->items as $location_row){
$response->items[$location_row->location_id]->reports[] = Searchy::reports('location_id')->query($location_row->location_id)->get();
}
// Return the results
return new LocationResource($response);
我得到的具体错误是 items
数组,在集合对象中不可用。是的,只是私人的。这说明我做错了。
附录:我使用searchy是因为它是模糊搜索,如果这不是最好的路线,而且有更好的选择,我完全赞成。
编辑响应对象(简称):
object(Illuminate\Support\Collection)#497 (1) {
["items":protected]=>
array(5) {
[0]=>
object(stdClass)#491 (10) {
["id"]=>
int(235)
["locality_id"]=>
string(32) "102938098209384"
["locality_name"]=>
string(7) "AREA 1"
["location_name"]=>
string(10) "Station 10"
["location_id"]=>
string(32) "098098019823909"
["location_address"]=>
string(21) "xx.xx.xx.xx"
["location_last_update"]=>
string(19) "2018-03-30 00:00:00"
["created_at"]=>
string(19) "2018-07-16 16:29:13"
["updated_at"]=>
string(19) "2018-07-16 16:29:13"
["relevance"]=>
string(2) "36"
}
}
}
1条答案
按热度按时间5vf7fwbs1#
没有办法测试它,但是尝试切换foreach循环,类似这样:
你可以做一件事来帮助你更好地想象你的需求,那就是把它们当作一个整体来处理
Arrays
,然后你只需要添加->toArray()
在比赛结束时->get()
方法(get()
方法是获取数据并返回collection
,toArray
转换collection
变成一个array
)编辑:根据searchy,您可以操作查询对象,因此我猜您可以添加连接
您可以使用getquery()而不是get()来返回数据库查询对象的示例,以防对结果进行进一步操作
我想在这种情况下,你可能会从中受益。不确定searchy是否允许,但当涉及到查询时,我通常要么选择使用laravel的orm(如果可以的话),要么用querybuilder把它们写出来,这很简单
https://laravel.com/docs/5.6/eloquent-relationships#eager-正在加载
假设你有这两个模型,位置和报告
查询将是:
Location::with('report')->get();