Красноречивый в отношениях «Мне нравится» - PullRequest
1 голос
/ 23 мая 2019

В настоящее время у меня есть модель Eloquent, которую я попытался упростить для этого примера, и структура которой аналогична приведенной ниже.

class Student extends Model {

    public function classes()
    {
        return $this->hasMany('App\Classes', 'class_code','code');
    }

    public function events()
    {
        return $this->hasOne('App\Events', 'event_code', 'code');
    }

}

Каждый студент имеет присвоенный код.Следовательно, ученик может быть сопоставлен с классами или событиями в отношениях один ко многим / одному через этот код.Проблема заключается в связи события.Код немного отличается.

В классах код будет 11-ABCD.00

Для событий код: 11-ABCD

Десятичная точкаотсутствует в коде события, но в остальном код тот же.Десятичная точка просто учитывает более тонкие подразделения.Для отношений это не имеет значения и может существовать не всегда, т. Е. У студента может не быть класса или события, связанного с ним.

Я могу вручную получить запись о событии, например:

class Student extends Model {

public function events($code)
{        
        $code = explode('.', $code);

        if(count($code) > 0)
        {    
            $code = $code[0];
        }

        return Event::where('code', $code)->first();
    }
}

Но это не в духе красноречия, когда я хочу получить всю коллекцию, например:

$results = Student::with('events')->first();

Короче говоря, могу ли я спроектировать взаимосвязь события, чтобы автоматически взять ключ 'code' ираздеть это так, чтобы я мог получить соответствующие записи?

Пример кодирования:

Студент (модель) (10-ABCD.10)

Классы (один ко многим)) (10-ABCD.10)

Событие (один на один) (10-ABCD)

...