*/ private $stats; public function __construct() { $this->stats = new ArrayCollection(); } public function __clone() { $this->id = null; $this->sentCount = 0; $this->favoriteCount = 0; $this->retweetCount = 0; $this->stats = new ArrayCollection(); parent::__clone(); } public static function loadMetadata(ORM\ClassMetadata $metadata): void { $builder = new ClassMetadataBuilder($metadata); $builder->setTable('tweets') ->setCustomRepositoryClass(TweetRepository::class) ->addIndex(['sent_count'], 'sent_count_index') ->addIndex(['favorite_count'], 'favorite_count_index') ->addIndex(['retweet_count'], 'retweet_count_index'); $builder->addIdColumns(); $builder->addCategory(); $builder->addNullableField('mediaId', Types::STRING, 'media_id'); $builder->addNullableField('mediaPath', Types::STRING, 'media_path'); $builder->addField('text', Types::STRING, ['length' => 280]); $builder->addNullableField('sentCount', Types::INTEGER, 'sent_count'); $builder->addNullableField('favoriteCount', Types::INTEGER, 'favorite_count'); $builder->addNullableField('retweetCount', Types::INTEGER, 'retweet_count'); $builder->addNullableField('language', Types::STRING, 'lang'); $builder->createManyToOne('page', Page::class) ->addJoinColumn('page_id', 'id', true, false, 'SET NULL') ->build(); $builder->createManyToOne('asset', Asset::class) ->addJoinColumn('asset_id', 'id', true, false, 'SET NULL') ->build(); $builder->createOneToMany('stats', 'TweetStat') ->setIndexBy('id') ->mappedBy('tweet') ->cascadePersist() ->fetchExtraLazy() ->build(); } /** * Prepares the metadata for API usage. */ public static function loadApiMetadata(ApiMetadataDriver $metadata): void { $metadata->setGroupPrefix('tweet') ->addListProperties( [ 'id', 'name', 'text', 'language', 'category', ] ) ->addProperties( [ 'mediaId', 'mediaPath', 'sentCount', 'favoriteCount', 'retweetCount', 'description', ] ) ->build(); } /** * Constraints for required fields. */ public static function loadValidatorMetadata(ClassMetadata $metadata): void { $metadata->addPropertyConstraint('text', new Assert\Length( [ 'max' => 280, ] )); } /** * @return int|null */ public function getId() { return $this->id; } /** * @param int $id * * @return $this */ public function setId($id) { $this->id = $id; return $this; } /** * @return string */ public function getName() { return $this->name; } /** * @param int $name * * @return $this */ public function setName($name) { $this->isChanged('name', $name); $this->name = $name; return $this; } /** * @return string */ public function getDescription() { return $this->description; } /** * @param string|null $description * * @return $this */ public function setDescription($description) { $this->isChanged('description', $description); $this->description = $description; return $this; } /** * @return string|null */ public function getMediaId() { return $this->mediaId; } /** * @param string $mediaId * * @return $this */ public function setMediaId($mediaId) { $this->isChanged('mediaId', $mediaId); $this->mediaId = $mediaId; return $this; } /** * @return string|null */ public function getMediaPath() { return $this->mediaPath; } /** * @param string $mediaPath * * @return $this */ public function setMediaPath($mediaPath) { $this->isChanged('mediaPath', $mediaPath); $this->mediaPath = $mediaPath; return $this; } /** * @return string */ public function getText() { return $this->text; } /** * @param string $text * * @return $this */ public function setText($text) { $this->isChanged('text', $text); $this->text = $text; return $this; } /** * @return int|null */ public function getSentCount() { return $this->sentCount; } /** * @return $this */ public function setSentCount($sentCount) { $this->isChanged('sentCount', $sentCount); $this->sentCount = $sentCount; return $this; } /** * Add 1 to sentCount. * * @return $this */ public function sentCountUp() { $this->setSentCount($this->getSentCount() + 1); return $this; } /** * @return int */ public function getFavoriteCount() { return $this->favoriteCount; } /** * @param int $favoriteCount * * @return $this */ public function setFavoriteCount($favoriteCount) { $this->isChanged('favoriteCount', $favoriteCount); $this->favoriteCount = $favoriteCount; return $this; } /** * @return int */ public function getRetweetCount() { return $this->retweetCount; } /** * @param int $retweetCount * * @return $this */ public function setRetweetCount($retweetCount) { $this->isChanged('retweetCount', $retweetCount); $this->retweetCount = $retweetCount; return $this; } /** * @return string */ public function getLanguage() { return $this->language; } /** * @param string $language * * @return $this */ public function setLanguage($language) { $this->isChanged('language', $language); $this->language = $language; return $this; } /** * @return Asset|null */ public function getAsset() { return $this->asset; } /** * @return $this */ public function setAsset(Asset $asset) { $this->asset = $asset; return $this; } /** * @return Page|null */ public function getPage() { return $this->page; } /** * @return $this */ public function setPage(Page $page) { $this->page = $page; return $this; } /** * @return Category|null */ public function getCategory() { return $this->category; } /** * @return $this */ public function setCategory(Category $category) { $this->category = $category; return $this; } /** * @return mixed */ public function getStats() { return $this->stats; } }