0

私は2つのエンティティを持っています:

1) サービス

/**
     * @Id @Column(name="id", type="integer")
     * @GeneratedValue
     */
    private $id;

    /** @Column(length=255) */
    private $name;

    /** @Column(length=255) */
    private $description;

    /** @Column(type="integer") */
    private $parent;


    /**
     * @OneToMany(targetEntity="Lead", mappedBy="service",cascade={"persist"})
     **/
    protected $leads;

2) リード

/**
     * @Id @Column(name="id", type="integer")
     * @GeneratedValue
     */
    private $id;

    /** @Column(type="integer") */
    private $user_id;

    /** @Column(name="service_id", type="integer") */
    private $service_id;

    /** @Column(type="integer") */
    private $lead_sent;

    /** @Column(type="datetime") */
    private $date_created;


    /** @Column(type="datetime", nullable=true) */
    private $date_sent = null;

    /** @Column(type="integer", nullable=true) */
    private $size;

    /** @Column(type="text", nullable=true) */
    private $comment;

    /** @Column(type="datetime") */
    private $estimate_date;

    /** @Column(type="integer") */
    private $source_zip;

    /** @Column(type="integer", nullable=true) */
    private $destination_zip;

    /** @Column(type="integer", nullable=true) */
    private $parent_lead;


    /**
     * @ManyToOne(targetEntity="Service", inversedBy="leads")
     * * @JoinColumn(name="service_id", referencedColumnName="id")
     **/
    protected $service;

選択するとき:

$query = $em->createQuery("SELECT l FROM  Entities\Lead l 
                                            LEFT JOIN l.service s
                                            WHERE l.user_id='".$user_id."' ");
        $leads = $query->getResult();

        return $leads;

select を実行しているときはすべて問題ありませんが、insert を実行しているときはエラーが発生します。

Message: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'service_id' cannot be null

これは更新の場合にも当てはまると思います。

service_id を null にすることはできないため、このエラーは問題ありません。

これは私の挿入コードです:

$service = $this->em->getRepository("Entities\Service")->findBy(array("id"=>$data['master-service-id']));
$lead = new Entities\Lead;
$lead->setUser_id($this->user->getId());
$lead->setLead_sent(0);
$lead->setDate_created(new DateTime(date('Y-m-d H:i:s')));
$lead->setDate_sent(new DateTime(date('0000-00-00 00:00:00')));
$lead->setService_id($service[0]->getId());
if($data['commnet']){
$lead->setComment($data['commnet']);
}
$lead->setSource_zip($data['zip']);
if($data['target_zip']){
$lead->setDestination_zip($data['target_zip']);
}
$lead->setEstimate_date(new DateTime($data['date']));

$this->em->persist($lead);
$this->em->flush();

助けてください。

4

2 に答える 2

2

問題はここから始まります:

/** @Column(name="service_id", type="integer") */
private $service_id;

/**
 * @ManyToOne(targetEntity="Service", inversedBy="leads")
 * @JoinColumn(name="service_id", referencedColumnName="id")
 */
protected $service;

単一の db 列をand (または) の両方としてマップし ないでください! これを行うと Doctrine2 は不安定な動作をするため、通常の列または関連付けのいずれかを選択する必要があります。@Column @ManyToOne@OneToOne

この特定のケースでは、関連付けを選択することをお勧めしますので、@Column を削除してください。この部分のみを使用します。

/**
 * @ManyToOne(targetEntity="Service", inversedBy="leads")
 * @JoinColumn(name="service_id", referencedColumnName="id")
 */
protected $service;

次に、次のようなことができます。

$service = $em->getRepository('Service')->find(1);

$lead = new Lead();
$lead->setService($service);

$em->persist($lead);
$em->flush();

Doctrine2 は、Service テーブルの主キーが Lead テーブルの外部キー (service_id) として使用されることを確認します。

于 2013-05-22T21:10:17.710 に答える
-1

ぜんぜんわかりません。多くのグーグル検索の後、挿入のためにこれを行いました:

1. $service = $this->em->getRepository("Entities\Service")->find($data['master-service-id']);
2. $lead->setService($service);
3. $lead->setService_id($data['master-service-id']);

なんでやらなきゃいけないのかわからない

$lead->setService($service); //this is from service entity

これは、$lead->setService($service); を実行したときの mysql クエリ ログからのものです。その後のアドフラッシュ:

SELECT t0.id AS id1, t0.name AS name2, t0.description AS description3, t0.parent AS parent4 FROM services t0 WHERE t0.id = '5'
    924 Query   START TRANSACTION
    924 Query   INSERT INTO leads (user_id, service_id, lead_sent, date_created, date_sent, size, comment, estimate_date, source_zip, destination_zip, parent_lead) VALUES (19, 5, 0, '2013-04-30 19:53:48', '-0001-11-30 00:00:00', NULL, NULL, '2013-05-18 00:00:00', '21000', NULL, NULL)
    924 Query   commit

コメント/回答をお待ちしております。

于 2013-04-30T17:53:19.480 に答える