Помощи, В контроллере я обычно $this->getDoctrine()->getManager()->getRepository('ArtelProfileBundle:Teams') ->find($id)
Symfony Доктрина, найти() возвращают прокси-сервера сущности
но имеет Proxies_CG_ \ ProfileBundle \ Entity \ Команда почему ?? Поскольку это метод PUT и я использую для нового и старого объекта, но новый объект, это почти объект Artel \ ProfileBundle \ Entity \ Teams и имеет разные значения с Proxies_CG_ \ Artel \ ProfileBundle \ Entity \ Teams
пример teamOld = Proxies_CG_ \ ProfileBundle \ Entity \ Команда teamNew = Артель \ ProfileBundle \ Entity \ Команда
стараюсь
$qb = $this->getEntityManager()->createQueryBuilder('d');
$qb
->select('d')
->from('ArtelProfileBundle:Teams', 'd')
->andWhere('d.id = :id')
->setParameter('id', $id)
->getQuery()
->getResult()
;
$query = $qb->getQuery();
$results = $query->getResult();
return $results;
, но до сих пор Proxies_CG_ \ Артель \ ProfileBundle \ Entity \ Команда Старается
$proxyObject->__load();
но только добавить информацию, но мне нужно юридическое лицо, чтобы быть артели \ ProfileBundle \ Entity \ Команды для моей службы UpdateObject
public function putTeamAction(Request $request, $id)
{
$teamOld = $this->getDoctrine()->getRepository('ArtelProfileBundle:Teams')->putTeamClient($id);
if (!empty($user) && !empty($token)) {
$data = $this->get('serializer')->serialize($data, 'json');
$teamOld = $this->getDoctrine()->getManager()->getRepository('ArtelProfileBundle:Teams')
->find($id);
$teamNew = $this->get('serializer')
->deserialize($data, 'Artel\ProfileBundle\Entity\Teams', 'json');
$this->get('artel.project.update')->updateObject($teamOld, $teamNew);
$this->getDoctrine()->getManager()->flush();
return "Team successful update";
}
, и я не понимаю, я точно PUT действия для другого проекта объекта. Почему доктрина возвращает другую сущность для одного объекта? для команды -> прокси, проект -> полностью объект проекта? и в этом действии у меня нет этой проблемы команды (доверенности)
<?php
namespace Artel\ProfileBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Gedmo\Mapping\Annotation as Gedmo;
use FOS\ElasticaBundle\Configuration\Search;
/**
* Teams
*
* @ORM\Table(name="teams")
* @Gedmo\SoftDeleteable(fieldName="deletedAt")
* @ORM\Entity(repositoryClass="Artel\ProfileBundle\Entity\Repository\TeamsRepository")
* @Search(repositoryClass="Artel\ProfileBundle\Entity\Repository\ArticleRepository")
*/
class Teams
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
проекта (полностью объектный)
<?php
namespace Artel\ProfileBundle\Entity;
use Doctrine\ORM\Mapping as ORM,
Gedmo\Mapping\Annotation as Gedmo,
Symfony\Component\Validator\Constraints as Assert;
use Artel\ProfileBundle\Helper\HelperMethod;
use JMS\Serializer\Annotation\ExclusionPolicy;
use JMS\Serializer\Annotation\Expose;
use JMS\Serializer\Annotation\Type;
/**
* Project
*
* @ORM\Table(name="project")
* @Gedmo\SoftDeleteable(fieldName="deletedAt")
* @ORM\Entity(repositoryClass="Artel\ProfileBundle\Entity\Repository ProjectRepository")
* @ExclusionPolicy("all")
*/
class Project
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @Expose()
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
Чем отличается o_0?
public function updateObject($objectOld, $objectNew)
{
if (get_class($objectOld) != get_class($objectNew)) {
throw new \Exception('class not equals');
}
$accessor = new PropertyAccessor();
$reflect = new \ReflectionClass($objectOld);
$properties = $reflect->getProperties(\ReflectionProperty::IS_PUBLIC | \ReflectionProperty::IS_PROTECTED | \ReflectionProperty::IS_PRIVATE);
foreach ($properties as $property) {
$propertyName = $property->getName();
$newValue = $accessor->getValue($objectNew, $propertyName);
if ($newValue !== null) {
$accessor->setValue($objectOld, $propertyName, $newValue);
}
}
return $objectOld;
}
UPDATE MAGIC , когда я удалил $ идентификатора из паров и добавить в параметрах и в начале акции я findOneById я завершил юридическое лицо. Но когда я удалил в стартовом действии findOneById снова имеют прокси. И когда я использую для $ sampleOld findOneById, у меня все еще есть прокси. Только когда в стартовом действии $ team = $ this-> getDoctrine() -> getRepository ('ArtelProfileBundle: Teams') -> findOneById ($ team_id); Я завершил и после $ sampleOld = $ manager-> getRepository ('ArtelProfileBundle: Teams') -> find ($ team_id); завершено. Это волшебство.
public function putTeamAction(Request $request)
{
$team_id = $this->get('request')->request->get('id');
$team = $this->getDoctrine()->getRepository('ArtelProfileBundle:Teams')->findOneById($team_id);
$manager = $this->getDoctrine()->getManager();
$token = $this->get('request')->request->get('token');
$user = $this->getDoctrine()->getRepository('ArtelProfileBundle:Users')->findOneBySecuritytoken($token);
$data = $request->request->all();
$view = View::create();
if (!empty($user) && !empty($token)) {
$data = $this->get('serializer')->serialize($data, 'json');
$sampleOld = $manager->getRepository('ArtelProfileBundle:Teams')
->find($team_id);
$sampleNew = $this->get('serializer')
->deserialize($data, 'Artel\ProfileBundle\Entity\Teams', 'json');
if (!$sampleOld) {
$manager->persist($sampleNew);
$manager->flush();
$view = $this->view('Project successful create', 200);
return $this->handleView($view);
} else {
$this->get('artel.project.update')->updateObject($sampleOld, $sampleNew);
$manager->flush();
$view = $this->view('Project successful update', 200);
return $this->handleView($view);
}
}else{
$view = $this->view('Secret token is not valid', 101);
return $this->handleView($view);
}
}
, но у меня есть некоторые сущность и PUT метод $ projectOld = $ Manager-> getRepository ('ArtelProfileBundle: Project') -> найти ($ ID); и имеют нормальный объект, а не прокси, что другое? –
Почему доктрина возвращает другой объект для одного объекта? для команды -> прокси, проект -> полностью объект проекта –
Я не уверен, но, возможно, потому, что ArtelProfileBundle: Project не имеет ассоциаций –