Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 4中急切加载约束的问题-解决方案?_Laravel_Laravel 4_Eloquent - Fatal编程技术网

Laravel 4中急切加载约束的问题-解决方案?

Laravel 4中急切加载约束的问题-解决方案?,laravel,laravel-4,eloquent,Laravel,Laravel 4,Eloquent,我有两个表、位置和用户。地点可以有很多用户 // in Place.php public function users() { return $this->hasMany('User'); } //in User.php public function place() { return $this->belongsTo('Place'); } 我试图通过静态方法Place::locationsWithPeople()仅获取至少有一个活动和已启用用户关联的位置 这将

我有两个表、位置和用户。地点可以有很多用户

// in Place.php
public function users()
{
    return $this->hasMany('User');
}

//in User.php
public function place()
{
    return $this->belongsTo('Place');
}
我试图通过静态方法Place::locationsWithPeople()仅获取至少有一个活动和已启用用户关联的位置

这将产生一个HTTP500。移除两个where没有帮助

这是可行的,但它当然不包含两个位置:

    return Place::has('users')->get();
有人能帮忙吗?这似乎完全类似于拉威尔文档中的示例。

这对我来说很有效

$place = new Place;

$array = $place->with(array('users' => function($query)
{
    $query->where('enabled', 1)->where('active', 1);
}))->get();

var_dump($array->toArray());

可能是因为您试图静态地使用非静态方法?

问题似乎是由过度的资源消耗造成的,导致页面过度消耗资源而导致HTTP500。通过join语句重写它来修复此问题。

您能试试吗

return Place::with(array('users' => function($query)
        {
            $query->where('enabled', '=', 1)->where('active', '=', 1);
        }))->hasWith('users')->get();
方法haswith是我写的一个范围。您可以从中获取scopeHasWith()。这将与has()方法的工作方式相同,但它将在附加到查询生成器的位置之前调用WareLoad闭包


我认为这可以解决您使用资源过多的问题,并且您可以从哪里下载它们。我和您有相同的问题,我想用关系查询,但它也会发送所有匹配的记录,并导致内存问题。

500错误附带的错误消息是什么?它是否显示生成的mysql查询?最后,你退房了吗?Ciao@fideloper,我刚刚清理了日志并进行了检查;这个查询似乎占用了超过128MB的ram。我没有研究过这个问题,因为它看起来很奇怪,它使用了那么多。对于我们来说,能够看到错误消息以及其中可能包含的任何查询信息更为重要。这个错误只是一个使用了太多内存的PHP错误吗?看起来是这样。这是我在日志中看到的:[07-Jul-2013 22:56:25 Europe/Rome]PHP致命错误:允许的内存大小为134217728字节,在/media/sf_laravel/bootstrap/compiled.PHP的第5376行耗尽(试图分配50字节)。。。顺便说一句,如果你知道一种添加Elount生成的查询的方法,那将非常感谢:)嗨@轮班交换,不,我可以确认这只是一个资源使用问题。我增加了资源(达到512MB…)并且工作正常。但是我不能使用那么多的资源,所以我使用连接等重写了代码。现在速度也快了很多。
return Place::with(array('users' => function($query)
        {
            $query->where('enabled', '=', 1)->where('active', '=', 1);
        }))->hasWith('users')->get();