162  /  382
Справочник

Доступ к элементам коллекции

Просмотров: 35927
Дата последнего изменения: 27.10.2020
Татьяна Старкова
Сложность урока:
4 уровень - сложно, требуется сосредоточиться, внимание деталям и точному следованию инструкции.
1
2
3
4
5
Недоступно в лицензиях:
Ограничений нет
  • foreach

    Базовый класс коллекции реализует интерфейс \Iterator, что позволяет перебирать элементы в цикле:

    $books = \Bitrix\Main\Test\Typography\BookTable::getList()
    	->fetchCollection();
    
    foreach ($books as $book)
    {
    	// ...
    }
  • getAll, getByPrimary

    Объекты коллекции можно получить не только в цикле, но и напрямую. Метод getAll вернет все содержащиеся объекты в виде массива:

    $books = \Bitrix\Main\Test\Typography\BookTable::getList()
    	->fetchCollection();
    
    $bookObjects = $books->getAll();
    
    echo $bookObjects[0]->getId();
    // выведет значение ID первого объекта
    

    Для получения конкретных объектов, содержащихся в коллекции, предусмотрен метод getByPrimary:

    // 1. пример с простым первичным ключном
    $books = \Bitrix\Main\Test\Typography\BookTable::getList()
    		->fetchCollection();
    	
    $book = $books->getByPrimary(1);
    // книга с ID=1
    
    // 2. пример с составным первичным ключом
    $booksToAuthor = \Bitrix\Main\Test\Typography\BookAuthorTable::getList()
    	->fetchCollection();
    
    $bookToAuthor = $booksToAuthor->getByPrimary(
    	['BOOK_ID' => 2, 'AUTHOR_ID' => 18]
    );
    // будет присвоен объект отношения книги ID=2 с автором ID=18
    
  • has, hasByPrimary

    Проверить наличие конкретного объекта в коллекции можно методом has:

    $book1 = \Bitrix\Main\Test\Typography\Book::wakeUp(1);
    $book2 = \Bitrix\Main\Test\Typography\Book::wakeUp(2);
    
    $books = \Bitrix\Main\Test\Typography\BookTable::query()
    	->addSelect('*')
    	->whereIn('ID', [2, 3, 4])
    	->fetchCollection();
    
    var_dump($books->has($book1));
    // выведет false
    
    var_dump($books->has($book2));
    // выведет true
    

    Аналогично работает метод hasByPrimary, когда удобнее сделать проверку по первичному ключу:

    $books = \Bitrix\Main\Test\Typography\BookTable::query()
    	->addSelect('*')
    	->whereIn('ID', [2, 3, 4])
    	->fetchCollection();
    
    var_dump($books->hasByPrimary(1));
    // выведет false
    
    var_dump($books->hasByPrimary(2));
    // выведет true
    
  • add, []

    Добавление объектов реализовано методом add и интерфейсом ArrayAccess, позволяющим использовать конструкцию []:

    $book1 = \Bitrix\Main\Test\Typography\Book::wakeUp(1);
    
    $books = \Bitrix\Main\Test\Typography\BookTable::query()
    	->addSelect('*')
    	->whereIn('ID', [2, 3, 4])
    	->fetchCollection();
    
    $books->add($book1);
    // или
    $books[] = $book1;
  • remove, removeByPrimary

    Удалить объект из коллекции можно, задав его явно или указав первичный ключ:

    $book1 = \Bitrix\Main\Test\Typography\Book::wakeUp(1);
    
    $books = \Bitrix\Main\Test\Typography\BookTable::getList()
    	->fetchCollection();
    
    $books->remove($book1);
    // из коллекции удалится книга с ID=1
    
    $books->removeByPrimary(2);
    // из коллекции удалится книга с ID=2
    


17
Курсы разработаны в компании «1С-Битрикс»

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