laravel 4中的3个模型 - 选择关系whereHas Query

时间:2015-03-27 10:36:54

标签: php mysql laravel relationship

我有3个型号:

  • 用户
  • 行星
  • Sunsystem

关系:

在用户模型中:

    public function planets() {
        return $this->hasMany('Planet');
    }

在行星模型中:

    public function sunsystem() {
        return $this->belongsTo('Sunsystem');
    }

    public function user() {
        return $this->belongsTo('User');
    }

在sunsystem模型中:

    public function planets() {
        return $this->hasMany('Planet');
    }

现在我想要选择所有相关行星的所有太阳系 但只有相关行星属于实际用户的太阳系(在本例中为ID 12)。 但是我是如何得到正确的结果的呢? 这是我尝试的,但它只给我一个sunsystem,但我期待2个sunsystem。我认为我的查询错了......:

        $s = Sunsystem::whereHas('Planets', function($q) {
            $q->whereHas('User', function ($u) {
                $u->whereUserId(12);
            });
        })->get();

这也不起作用:

     $s = Sunsystem::select('Sunsystems.*')
       ->join('planets','planets.sunsystem_id','=','sunsystems.id')
       ->join('users','users.id','=','planets.user_id')
       ->where('users.id','=',12)
       ->get();

如果有2个行星具有不同的sunsystem_id但是相同的user_id我只得到一个sunsystem,但我预计有两个。

1 个答案:

答案 0 :(得分:1)

请尝试

$s = Sunsystem::select('Sunsystems.*')
     ->join('planets','planets.sunsystem_id','=','Sunsystems.id')
     ->join('users','users.id','=','planets.user_id')
     ->where('users.id','=',12)
     ->get();