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();