Вариант 1: 1 для m: m Eloquent Relationship в Laravel 5.5: Является ли пример верным? - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь указать отношение 1: 1 через orgperson (), несмотря на характер существующей связи m: m, orgs (), так что я могу загрузить организацию по умолчанию 1.

У меня есть следующие объекты, каждый с таблицей:

  • модель человека - важное примечание, defaultOrgID существует для человека
  • запись организации
  • сводная точка, соединяющая оба (orgperson)с дополнительными полями

Является ли допустимым мое "jerry-rigging", как показано в функции orgperson ()?

Если нет, есть ли что-нибудь близкое, что могло бы быть?

В модели Person соответствующие отношения следующие:

    // many-to-many relationship from person to orgs via org-person table
    public function orgs()
    {
        return $this->belongsToMany(Org::class, 'org-person', 'personID', 'orgID');
    }

    // "pivot table" with additional fields
    public function orgperson()
    {
        return $this->belongsTo(OrgPerson::class, 'personID', 'personID')
            ->where([
                ['orgID', $this->defaultOrgID],
                ['personID', $this->personID]
            ]);
    }

Ответы [ 2 ]

0 голосов
/ 02 мая 2019

Оказывается, это было так просто, как я надеялся.

Моя промежуточная таблица (org-person) была определена как Модель. Я поиграл с тем, чтобы его класс расширял Pivot вместо Model, но, в конце концов, я остановился на Model.

Код, который работает (отношения на моей модели Person):

public function orgperson()
{
    return $this->hasOne(OrgPerson::class, 'personID', 'personID')
        ->where('orgID', $this->defaultOrgID);
}

Это дает мне желаемый результат, когда я могу получить это отношение, возвращающее одну запись из нескольких записей в сводной таблице на основе значения в defaultOrgID.

Моя проблема заключалась в том, что вместо hasOne использовалось «ownTo».

0 голосов
/ 29 марта 2019

Поскольку вы уже определили свои отношения "организации", лучшим подходом будет:

public function orgperson()
    {
        return $this->orgs()
            ->where("orgID", '=', $this->defaultOrgID)
            ->where("personID", '=', $this->personID);       

    }
...