我该如何改进我的查询,以获得“PHP致命错误:允许的内存大小”(在laravel 5.2中订购和分页)
我有几个称为海报的项目有日志。我想在创建这些日志的日期前订购海报。我该如何改进我的查询,以获得“PHP致命错误:允许的内存大小”(在laravel 5.2中订购和分页)
我有一个名为海报与此代码模式:
class Poster extends Model {
protected $table = 'posters';
public function pos_log_resumenEnviado()
{
return $this->hasMany('App\models\PosterLog', '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我可以使用PAGINATE()方法,但我不知道是否有另一种方式为了这个命令。
这里是你必须使用 首先正确的查询,使用其中首先要排除不必要的条目,然后里面有回调可以使用雄辩的筛选结果:
$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();
但是,我怎么能把日志创建日期里面orderBy?这不是海报表的一列。 –
当你在回调中时,你可以直接访问pos_log_resumenEnviado,只需要把orderBy('created_at','ASC'); – Sletheren
非常感谢。现在我可以使用paginate()并避免php内存错误。不幸的是,现在的项目顺序是不正确的。 –
我看来,要排序你用PHP的结果,你为什么不使用MYSQL呢? – Mcsky
因为我不知道如何使用MYSQL来排序这个字段。 –
我不使用Laravel,但应阅读文档以通过mysql执行命令。这会更快,并避免php内存限制错误。 – Mcsky