Задать вопрос
@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;
  }

}

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

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

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

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

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

Похожие вопросы