Newscoop\Entity\Repository\PlaylistRepository::save PHP Метод

save() публичный Метод

Save playlist with articles.
public save ( Playlist $playlist = null, array $articles = null )
$playlist Newscoop\Entity\Playlist $playlist
$articles array
    public function save(Playlist $playlist = null, $articles = null)
    {
        $em = $this->getEntityManager();
        $em->getConnection()->beginTransaction();
        try {
            $em->persist($playlist);
            if (is_null($playlist->getId())) {
                $em->flush();
            }
            $query = $em->createQuery("DELETE FROM Newscoop\\Entity\\PlaylistArticle pa WHERE pa.playlist = ?1");
            $query->setParameter(1, $playlist);
            $query->execute();
            if (!is_null($articles) && is_array($articles)) {
                $ar = $this->getEntityManager()->getRepository('Newscoop\\Entity\\Article');
                foreach ($articles as $articleId) {
                    $article = new PlaylistArticle();
                    $article->setPlaylist($playlist);
                    if (($a = current($ar->findBy(array('number' => $articleId)))) instanceof \Newscoop\Entity\Article) {
                        $article->setArticle($a);
                    }
                    $em->persist($article);
                }
            }
            $em->flush();
            $em->getConnection()->commit();
        } catch (\Exception $e) {
            $em->getConnection()->rollback();
            $em->close();
            return $e;
        }
        return $playlist;
    }