Zend - доктрина 2, вставка данных / сопоставление карт - PullRequest
0 голосов
/ 29 июня 2011

Я наконец-то настроил свое сопоставление для двух таблиц, теперь я могу объединять таблицы с помощью построителя запросов.

Однако я не могу добавить данные в столбец соединения, он продолжает выдавать значение NULL.

мой аккаунт:

namespace Entities\Users;

/**
 * @Entity(repositoryClass="\Entities\Users\Account")
 * @Table(name="account")
 * @HasLifecycleCallbacks
 */
class Account extends \Entities\AbstractEntity {

    /**
     * @Id @Column(name="accid", type="bigint",length=15)
     * @GeneratedValue(strategy="AUTO")
     */
    protected $accid;

    /** @Column(name="name", type="string", length=255) */
    protected $name;  

    /** @Column(name="profileid", type="integer", length=255) */
    protected $profileid; 


    /** @Column(name="acc_added_date", type="datetime", columnDefinition="datetime", nullable=true) */
    private $acc_added_date;

    /**
     * @ManyToOne(targetEntity="Profiledetails")
     * @JoinColumn(name="profileid", referencedColumnName="pid") 
     */
    private $account;

и мой профиль: сущность:

namespace Entities\Users;

/**
 * @Entity(repositoryClass="\Entities\Users\Profiledetails")
 * @Table(name="profiledetails")
 * @HasLifecycleCallbacks
 */
class Profiledetails extends \Entities\AbstractEntity {

    /**
     * @Id @Column(name="pid", type="bigint",length=15)
     * @GeneratedValue(strategy="AUTO")
     */
    protected $accid;
    /** @Column(name="name", type="string", length=255) */
    protected $name;
    /** @Column(name="profileid", type="integer", length=255) */
    protected $profileid;
    /** @Column(name="acc_added_date", type="datetime", columnDefinition="datetime", nullable=true) */
    private $acc_added_date;
    /**
     * @OneToMany(targetEntity="Account", mappedBy="account")
     * @JoinColumn(name="pid", referencedColumnName="pid")
     */
    private $stances;

я использую для использования:

    $postdata array ('name'=>'jason');
    $entity =new \Entities\Users\Account;
    $obj->setData($postdata);

    $this->_doctrine->persist($obj);
    $this->_doctrine->flush();
    $this->_doctrine->clear();

и это не добавляет .. чтоспособ добавить данные в родительскую таблицу, где обновляются все связанные таблицы?потому что раньше я мог ввести profileid и теперь его ноль, потому что я использовал его в качестве объединенного столбца ..

1 Ответ

1 голос
/ 30 июня 2011

Связанные объекты могут быть «обновлены», если вы установите cascade=[persist] в ваших определениях отношений. Вам также нужно установить @mappedBy и @inversedBy для обеих сторон отношений. По сути, @mappedBy устанавливается на сторону oneToMany (называемую обратной стороной), а @inversedBy - на сторону manyToOne (называемой собственной стороной)

http://www.doctrine -project.org / документы / ОРМ / 2,0 / ен / ссылка / ассоциативно-mapping.html # один-ко-многим-двунаправленная

Правильный путь в основном

//assume $this->_doctrine is instance of EntityManager
$user = new User();
$user->setEmail('john@example.com');
$account = new Account();
$account->setName('john');
$account->setUser($user);
$user->addAccount($account); //if no cascade set
$this->_doctrine->persist($account); 
$this->_doctrine->persist($user); //if no cascade set
$this->_doctrine->flush();

http://www.doctrine -project.org / документы / ОРМ / 2,0 / ен / ссылки / рабочий-с associations.html # установления-ассоциации

...