2

我有 2 张桌子,地点和用户。地方可以有很多用户。

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

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

并且我试图仅通过静态方法 Place::locationsWithPeople() 获取至少有一个活动且启用的用户关联的地方。

public static function locationsWithPeople()
{
     return Place::with(array('users' => function($query)
        {
            $query->where('enabled', '=', 1)->where('active', '=', 1);
        }))->get();
}

这会产生一个 HTTP 500。删除两个 where 没有帮助。

这有效,但当然它不包含两个 where:

    return Place::has('users')->get();

任何人都可以帮忙吗?它似乎与 Laravel 文档中的示例完全相似。

4

3 回答 3

0

这对我有用。

$place = new Place;

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

var_dump($array->toArray());

也许是因为您试图静态使用非静态方法?

于 2013-07-08T00:06:01.787 回答
0

你能试试这个吗?

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

方法 hasWith 是我编写的范围。您可以从http://paste.laravel.com/13jb获取 scopeHasWith() 。这将与 has() 方法相同,但它会在将 WHERE 附加到查询构建器之前调用 eagerload 闭包。

我认为这可以解决您使用资源过多的问题,并且您可以从 Eagerload 闭包中获取它们。我和你有同样的问题,我想用关系查询,但它发送所有匹配 WHEREIN 的记录也导致内存问题。

于 2013-10-31T10:46:30.067 回答
0

看来问题是由于资源消耗过多导致页面资源耗尽导致的HTTP500。通过连接语句重写它来修复。

于 2013-07-08T10:31:01.570 回答