public function testTranslatable() { $person = new Person(); $person->translate()->setName('Jen'); $person->translate('ru_RU')->setName('Женя'); $person->setDescription('description'); $person->translate('ru_RU')->setDescription('multilingual description'); $this->assertSame('Jen', $person->translate()->getName()); $this->assertSame('Женя', $person->translate('ru_RU')->getName()); $this->assertSame('multilingual description', $person->getDescription()); $this->assertSame('multilingual description', $person->translate()->getDescription()); $this->assertSame('multilingual description', $person->translate('ru_RU')->getDescription()); $this->em->persist($person); $this->em->flush(); $this->em->clear(); // retrieve record (translations would be fetched later - by demand) $person = $this->em->getRepository(self::PERSON)->findOneByName('Jen'); $this->assertSame('Jen', $person->getName()); $this->assertSame('Jen', $person->translate()->getName()); $this->assertSame('Женя', $person->translate('ru_RU')->getName()); $this->assertSame('multilingual description', $person->getDescription()); $this->assertSame('multilingual description', $person->translate()->getDescription()); $this->assertSame('multilingual description', $person->translate('ru_RU')->getDescription()); // retrieve record with all translations in one query $persons = $this->em->getRepository(self::PERSON)->createQueryBuilder('p')->select('p, t')->join('p.translations', 't')->getQuery()->execute(); $person = $persons[0]; $this->assertSame('Jen', $person->getName()); $this->assertSame('Jen', $person->translate()->getName()); $this->assertSame('Женя', $person->translate('ru_RU')->getName()); $this->assertSame('multilingual description', $person->getDescription()); $this->assertSame('multilingual description', $person->translate()->getDescription()); $this->assertSame('multilingual description', $person->translate('ru_RU')->getDescription()); $person->translate('es_ES')->setName('Amigo'); $this->em->flush(); // retrieve record with all translations in one query $persons = $this->em->getRepository(self::PERSON)->createQueryBuilder('p')->select('p, t')->join('p.translations', 't')->getQuery()->execute(); $person = $persons[0]; $this->assertSame('Jen', $person->getName()); $this->assertSame('Jen', $person->translate()->getName()); $this->assertSame('Женя', $person->translate('ru_RU')->getName()); $this->assertSame('Amigo', $person->translate('es_ES')->getName()); $this->assertSame('multilingual description', $person->getDescription()); $this->assertSame('multilingual description', $person->translate()->getDescription()); $this->assertSame('multilingual description', $person->translate('ru_RU')->getDescription()); }
public function testTranslatableProxyWithUpperCaseProperty() { $person = new Person(); $person->setName('Jen'); $person->translate('ru_RU')->name = 'Женя'; $person->setLastName('Abramowicz'); $person->translate('ru_RU')->setLastName('Абрамович'); $person->setDescription('description'); $person->translate('ru_RU')->setDescription('multilingual description'); $this->em->persist($person); $this->em->flush(); $this->em->clear(); $personProxy = $this->em->getReference(self::PERSON, array('id' => 1)); $this->assertTrue($personProxy instanceof Proxy); $name = $personProxy->translate('ru_RU')->getName(); $this->assertSame('Женя', $name); $lastName = $personProxy->translate('ru_RU')->getLastName(); $this->assertSame('Абрамович', $lastName); }