@AlexandrMa

Как соединить две модели в коллекции?

Есть две модели Компания и Контакт. Ранее я в Компании хранил массив Контактов. Но тк это две независимые модели, то решил удалить метод addContact из Компании. Вынести его в класс коллекции. Но тут сложности возникли.
class Company{

  public int $id;
  public string $name;
  //public array $contacts;

  public function __construct(int $id, string $name)
  {
    $this->id = $id;
    $this->name = $name;
  }

  /*public function addContact(Contact $contact){
    $this->contacts[] = $contact;
  }*/

}


class Contact{

  public int $id;
  public string $name;

  public function __construct(int $id, string $name)
  {
    $this->id = $id;
    $this->name = $name;
  }

}


class CompanyCollection
{
  public array $data;

  public function getData():array
  {
    $this->merge();
    return $this->data;
  }

  public function merge()
  {
    for($i = 0; $i <= 5; $i++){

      $companyId = $i+1;

      $this->addCompany(new Company($companyId, 'CompanyName'));

      for($j = 0; $j < 3; $j++){
        $contactId = $j + 1;
        $this->addContact(new Contact($contactId, 'ContactName'), $i);
      }

    }
  }

  public function addCompany(Company $company){
    $this->data[] = $company;
  }

  public function addContact(Contact $contact, int $position){
    $this->data[$position][] = $contact;
  }

}

В классе коллекции получилась какая-то чушь. Как правильно соединить?
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ответы на вопрос 2
for($i = 0; $i <= 5; $i++){
Почему пять, почему не десять?
for($j = 0; $j < 3; $j++){
А почему не пять?

Предложил бы использовать foreach, но ни по вопросу, ни по коду не понятно каким образом наборы этих объектов должны мержиться.

получилась какая-то чушь

Вот именно - коллекция компаний, хранит зачем-то коллекцию контактов, при чем в одном массиве.
А попытка получить данные из коллекции почему-то вызывает сайд-эффект в виде мержа ее содержимого между собой.
Ответ написан
gzhegow
@gzhegow
aka "ОбнимиБизнесмена"
Коллекция это про пачку.

Создав класс коллекции компаний и запихнув туда контакты ты сказал примерно так "несколько компаний имеют общие контакты в рамках этой пачки компаний".

Иногда это имеет смысл, но это такие редкие случаи, что так не надо делать. "независимость" модели это про другое, это про то что контакты являются частью одной задачи из ТЗ, а компании - другой. Но это не мешает одним иметь другое в подчинении, если в тз написано что компания имеет контакты.

Если ты решил сделать что контакты имеют не только компания или же разные компании могут иметь одни и те же контакты, то это новая таблица company_contact, где указаны все связки компаний с контактами, а не коллекция.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽