Laravel 返回关系有一个属于多个

Laravel 返回关系有一个属于多个,laravel,laravel-5.2,Laravel,Laravel 5.2,我有很多问题的考试 有些问题有一个家长问题 现在我需要一个函数在考试中返回我所有的家长问题^ 我得到了这段代码 public function getQuestionParentsAttribute() { $array = []; foreach($this->questions->load('parent') as $q) { if($q->parent !== null) $array[] = $q->parent;

我有很多问题的考试

有些问题有一个家长问题

现在我需要一个函数在考试中返回我所有的家长问题^

我得到了这段代码

public function getQuestionParentsAttribute() {
    $array = [];
    foreach($this->questions->load('parent') as $q) {
        if($q->parent !== null)
        $array[] = $q->parent;
    }
    return $array;
}


class Exam extends Model {
    public function questions() {
        return $this->belongsToMany(Question::class);
    }
}

class Question extends Model {
    public function parent() {
        return $this->hasOne(Question::class, 'id', 'parent_id');
    }
}
但是我想把它作为关系,而不是属性,所以我可以像

$exam->with('parentQuestion')->get()

我是这样做的,所以它不是每次使用都附加的:

class Exam extends Model {
    public function setParents() {
        $array = $this->questions()->where('parent_id', '>', 0)->with('parent')->get();
        $this->parents =  array_pluck($array, 'parent');
    }

}
用法:

$exam = Exam::find($id);
$exam->setParents();
return $exam;

我确信这不是最好的,但现在是最好的。

你能在考试和问题之间以及问题和他们的父母之间粘贴关系定义吗?添加了关系。