Как мне настроить Laravel / OctoberCMS Model для таблицы, которая должна ссылаться на сводную таблицу? - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть 3 типа контента, курс, место и расписание. Курс принадлежит множеству местоположений, местоположение также относится ко многим курсам, но расписание может принадлежать только одному курсу и одному местоположению.
Я уже установил отношение многие ко многим для модели курса и местоположения через сводную таблицу (course_location). Моя проблема заключается в том, как выполнить привязку / привязку расписания к сводной таблице в модели, или я делаю это неправильно.

Структура таблиц

**course Table**
id
name

**location Table**
id
name

**course_location Pivot Table**
id
course_id
location_id

**schedule Table**
id
course_id
location_id
time
class Course extends Model
{
    public $belongsToMany = [
        'locations' => [
            Location::class,
            'table'      => 'course_location',
            'key'        => 'course_id',
            'otherKey'   => 'location_id',
            'timestamps' => true,
        ],
    ];
}

class Location extends Model
{
    public $belongsToMany = [
        'courses' => [
            Course::class,
            'table'      => 'course_location',
            'key'        => 'location_id',
            'otherKey'   => 'course_id',
            'timestamps' => true,
        ],
    ];
}

1 Ответ

1 голос
/ 26 февраля 2020

Я бы просто использовал belongTo с моделью расписания и hasOne с местоположением и моделью курса.

Это как для курса, так и для местоположения.

class Course extends Model
{
    public $hasOne = [
        'schedule' => ['Author\Plugin\Models\Schedule']
    ];
}

class Location extends Model
{
    public $hasOne = [
        'schedule' => ['Author\Plugin\Models\Schedule']
    ];
}

Это для расписания

class Schedule extends Model
{
    public $belongsTo = [
        'course' => ['Author\Plugin\Models\Course'],
        'location' => ['Author\Plugin\Models\Location']
    ];
}

И тогда вам нужно будет добавить только course_id и location_id столбцы в таблицу расписания. Затем вы можете получить доступ к записи курса и записи местоположения через запись расписания или любым другим способом.

Экспериментальный - я никогда не пробовал это

Возможно, вы сможете укажите таблицу отношений «многие ко многим» в этом случае course_location в различных отношениях, и это может сработать.

class Course extends Model
{
    public $hasOne = [
        'schedule' => ['Author\Plugin\Models\Schedule', 'table' => 'course_location']
    ];
}

class Location extends Model
{
    public $hasOne = [
        'schedule' => ['Author\Plugin\Models\Schedule', 'table' => 'course_location']
    ];
}

class Schedule extends Model
{
    public $belongsTo = [
        'course' => ['Author\Plugin\Models\Course', 'table' => 'course_location'],
        'location' => ['Author\Plugin\Models\Location', 'table' => 'course_location']
    ];
}
...