我在将父记录和子记录放在单独的数组中时遇到问题。例如,我有2个模型:
1)比赛(父母):比赛有很多赛事
public function events(){
return $this->hasMany(Event::class);
}
2)事件(儿童):事件属于比赛
public function tournament(){
return $this->belongsTo(Tournament::class);
}
我根据发送到控制器的请求中的参数过滤事件。过滤器是“ away_team”,“ home_team”,“ tournament_id”。我过滤掉事件,然后尝试尽快加载事件所属的锦标赛。
之后,我尝试获得比赛并将它们分别放入阵列。但这会引发内存允许错误。
我知道我可以增加php.ini中的内存,但是我想以最好的方式参加比赛-最好是雄辩的查询-并减少内存使用量。我已经有赛事参加比赛,但是问题是赛事在一个集合中,因此我如何根据请求输入查询在一个单独的集合中同时获得赛事和独特的比赛。
到目前为止,这是我设法执行的代码。我知道它可以工作,但是会抛出错误,因为我有10,000或更多的记录:
public functions filter(Request $request){
$query = App\Model\Event::query();
if ($request->has('away_team')) {
$query = $query->where('away_team.name', 'like', '%' . $request->away_team . '%');
}
if ($request->has('home_team')) {
$query = $query->where('home_team.name', 'like', '%' . $request->home_team . '%');
}
if ($request->has('tournament_id')) {
$query = $query->where('tournament_id', new ObjectID($request->tournament_id));
}
//events collection with tournament
$events = $query->with('tournament')->get();
//here I get Allowed memory error
$tournaments = [];
foreach ($events as $event) {
$tournaments[] = $event->tournament;
}
$tournaments = array_unique($tournaments);
}
那么,根据以下条件将这些模型记录放入单独的集合中的解决方案是什么:
1)事件必须与$ request过滤器匹配
2)比赛必须是唯一的,并且属于DB事件的结果
PS:我对mongo db使用PHP-mongo和Laravel雄辩
PS2:我知道mongo与关系无关,但是您可以以某种方式使用它
任何帮助,将不胜感激!提前致谢。