Laravel - 关系,三层

时间:2015-11-23 06:22:18

标签: php laravel laravel-5 laravel-5.1

我对Laravel相当新,我开始建立关系。我很快就得到了一些相当容易的东西,但我正在努力争取一些更先进的东西。

基本上,我有三件事:

  • 联系人
  • 目标

在每个联系人的下方,我可以保存片刻,我对联系人做了不同的事情。 每个时刻也可以与目标相关联。

现在,我正在尝试创建一个显示我所有目标的页面,在该页面下将显示我的每个时刻,并且对于每个时刻,我想要一些关于时刻所附加的基本信息。

以下是我的表格设置方式:

目标表:

 - id - Goal name - Goal description 

时刻表:

- id - userId - goalId - Moment name - Description

用户表

- id - firstname - lastname

所以我得到了:

class Goal extends Model
{

    public function contact() {
        return $this->belongsTo('App\Contact');
    }

    public function moments() {
        return $this->hasMany('App\Moment', 'goalId');
        }
}

我已尝试使用以下代码获取所有结果:

    $goals = Goal::with('moments', 'contact')
        ->where('authId', Auth::id())
        ->where('hidden', 'false')
        ->get();

    dd($goals);

但是所有联系人都返回为空...我尝试了不同的事情,但还没有能够解决这个问题。

它是否使用hasManyThrough或类似的东西?

编辑:所以我已经能够将它们全部放在一起,但不是按照我想要的顺序。 使用:

public function contact() {
    return $this->belongsTo('App\Contact', 'userId');
}

public function goal() {
    return $this->belongsTo('App\Goal', 'goalId', 'id');
}


$moments = Moment::with('goal', 'contact')
        ->where('authId', Auth::id())
        ->where('hidden', 'false')
        ->get();

    dd($moments);

我现在有一个$ moment对象,它有正确的目标和联系人的链接,除了我希望能够按目标排序,这是否可行?

感谢您的帮助!

干杯, 标记

解决

使用以下方法解决它:

public function contacts() {
    return $this->hasMany('App\Contact', 'id', 'userId');
}

public function moments() {
    return $this->hasMany('App\Moment', 'goalId');
}

    $goals = Goal::with('moments', 'moments.contact')
        ->where('authId', Auth::id())
        ->where('hidden', 'false')
        ->get();

    dd($goals);

1 个答案:

答案 0 :(得分:1)

解决

使用以下方法解决它:

public function contacts() {
    return $this->hasMany('App\Contact', 'id', 'userId');
}

public function moments() {
    return $this->hasMany('App\Moment', 'goalId');
}

    $goals = Goal::with('moments', 'moments.contact')
        ->where('authId', Auth::id())
        ->where('hidden', 'false')
        ->get();

    dd($goals);