如何改进我的查询以不"PHP Fatal error: Allowed memory size"(在 laravel 5.2 中排序和分页)



我有几个名为海报的项目,它们有日志。我想在这些日志的创建日期之前订购海报。

我有一个叫海报的模型,代码是:

class Poster extends Model {
protected $table = 'posters';
public function pos_log_resumenEnviado()
{
return $this->hasMany('AppmodelsPosterLog', 'pos_id')->where('log', 'Autores de poster enviado')->orWhere('log', 'Resumen de poster modificado')->latest();
}

然后在我的控制器中,我检索这样的结果:

$posters = Poster::with('pos_log_resumenEnviado', 'user')->where('state', 'Resumen pendiente de aceptacion')->get();
$posters = $posters->sortBy(function($pos)
{
if( sizeof($pos->pos_log_resumenEnviado) > 0)
return $pos->pos_log_resumenEnviado[0]->created_at;
})->take(1200);

我得到了所有的海报,然后我订购了它们,并获得了前1200个结果。这一直工作得很好(性能很慢(,但现在我得到了我在标题中说的php错误。错误甚至在sortBy执行之前就出现了,只是使用get((

如果我不必使用sortBy,我可以使用分页((方法,但我不知道是否有其他方法可以排序。

以下是您必须使用的正确查询首先,使用where First排除不需要的条目,然后在内部使用回调。您可以使用雄辩的过滤结果

$posters = Poster::where('state', 'Resumen pendiente de aceptacion')->with(['pos_log_resumenEnviado' => function($q){
return $q->orderBy('poster_logs.created_at','ASC');
}])->with('user')->get();

最新更新