BelongsToMany有一个或相反的关系

时间:2018-04-06 09:57:59

标签: laravel eloquent

我正在使用Laravel和Eloquent。 我有一个courses表和一个包含相关课程的Pivot表。

我名为relatedCourses的数据透视表有2列,course1& course2。 enter image description here

在上面的示例中,课程ID 5与课程ID 7相关。

$data["course"] = course::where("isActive",1)->with('related')->find(5);

这有效,并将ID 7作为相关内容。

如果我尝试 $data["course"] = course::where("isActive",1)->with('related')->find(7)它应该将ID 5作为相关内容,这正是我想要实现的目标。

我的代码在模型中是这样的:

class course extends Model
    {
        public function category()
        {
            return $this->hasOne('App\courseCategory',"categoryId");
        }

        public function related()
        {
            return $this->belongsToMany('App\Models\course', 'relatedCourses', 'course1', 'course2');
        }
    }

1 个答案:

答案 0 :(得分:0)

您可以为此查询定义两个关系。

class course extends Model
    {
        public function category()
        {
            return $this->hasOne('App\courseCategory',"categoryId");
        }

        public function relatedCourses()
        {
            return $this->belongsToMany('App\Models\Course', 'relatedCourses', 'course1', 'course2');
        }

        public function originalCourses()
        {
            return $this->belongsToMany('App\Models\Course', 'relatedCourses', 'course2', 'course1');
        }
    }

然后你可以查询你的关系,

$data["course"] = course::where("isActive",1)->with('relatedCourses')->find(5);

$data["course"] = course::where("isActive",1)->with('originalCourses')->find(7);

要合并这两种关系,您可以这样做

$course = course::where("isActive",1)->with('originalCourses', 'relatedCourses')->get();

希望这会对你有所帮助。