2015-04-16 2 views
0

У меня есть система отправки электронной почты, которая хранит их в базе данных, и CRON несет ответственность за их отправку. Я хотел сохранить объекты объектов, которые должны быть включены в это письмо непосредственно в столбце содержимого сущности электронной почты (Тип столбца - это объект).Сохранение объекта объекта в таблице другого пользователя

У меня есть запрос, который принимает частичные значения от других объектов, но doctrine сохраняет разные столбцы, чем я просил. Это приводит к пустым данным в электронной почте.

Я не знаю, ясно ли я объяснил, если так, я бы ответил на любые неясные моменты.

Email объект:

/** 
* Email 
* 
* @ORM\Entity 
* @ORM\Table(name="email") 
*/ 
class Email 
{ 
    const STATUS_WAITING = 'waiting'; 
    const STATUS_SENT = 'sent'; 
    const STATUS_FAILED = 'failed'; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="language", type="string", length=10, nullable=true) 
    */ 
    private $language; 

    /** 
    * @var text 
    * 
    * @ORM\Column(type="string", length=10) 
    */ 
    private $status; 

    /** 
    * @var object 
    * 
    * @ORM\Column(type="object") 
    */ 
    private $content; 
} 

Встроенный объект электронной почты со всеми необходимыми данными (ЭТО НЕ ОБЪЕКТ):

class BaseMail 
{ 
    /** 
    * @var string 
    */ 
    protected $from; 

    /** 
    * @var string from translation file 
    */ 
    protected $subject; 

    /** 
    * @var string 
    */ 
    protected $plainTemplate; 

    /** 
    * @var string 
    */ 
    protected $htmlTemplate; 

    /** 
    * @var array 
    */ 
    protected $options; 

    public function __construct(array $options = array()) 
    { 
     $this->options = $options; 
    } 
} 

Код:

$order = $this->getDoctrine()->getRepository('AppBundle:Order')->findWithSomeUserPartialsFieldsAndRelations($id); 
$email = new BaseEmail(array('object' => $order')); 
$emailEntity = new Email(); 
$emailEntity->setContent($email); 

И теперь, даже если $order имеет поля около User, они не сохраняются в столбце содержимого электронной почты. Так что, если я хочу сделать что-то вроде этого:

$order = $emailEntity->getContent()->getObject(); 
$userFirstName = $order->getUser()->getFirstname() 

NULL я получаю

;

+0

Post кода или никто не может помочь вам братан ... –

+0

@ R.CanserYanbakan Я отредактировал мой вопрос – mmmm

ответ

0

@ORM\Column(type="object") не существует. Вы должны создать связь между двумя вашими сущностями, а именно: @ORM\ManyToOne()

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

Доктрина документация об отображении отношения: https://doctrine-orm.readthedocs.org/en/latest/reference/association-mapping.html

+0

хорошо, этот тип колонки делает существуют ... и второй класс не является сущностью. Это как объект ценности. – mmmm

+0

Вы должны сделать это сущностью.Am entity - это объект ценности в конце концов, и вам нужно, чтобы он сохранялся – Jean

+0

Хорошо, но это не решает проблему и не то, о чем я просил. – mmmm

1

Вероятно, вы выбираете решение, которое потребует сериализации/десериализации объекта, но не рекомендуется в качестве общего подхода.

Более подробную информацию, как это сделать: http://doctrine-orm.readthedocs.org/en/latest/cookbook/entities-in-session.html

Но вместо сеанса вы будете хранить сериализованную объект в БД

Решение может принести вам много неприятных сюрпризов и быть готовы к вызову .Если вы будете пройдите таким образом, я порекомендую вам использовать JMSSerializationBundle https://github.com/schmittjoh/JMSSerializerBundle, которые имеют расширенные методы для работы с сериализацией сущности.

Также не забудьте «слить» объект после того, как он был десериализован

Смежные вопросы