私はOneToOneマッピングで発生した問題を真剣に抱えています。Doctrine2で指定されたIDが間違っていますOneToOneマッピング
/**
* OrderItem
*
* @ORM\Table(name="order_item")
* @ORM\Entity
*/
class OrderItem
{
/**
* @var integer
*
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
// ... //
/**
* @ORM\OneToOne(targetEntity="UserPricingOption", mappedBy="orderItem")
*/
private $userPricingOption;
/**
* @ORM\ManyToOne(targetEntity="Order", inversedBy="items")
* @ORM\JoinColumn(referencedColumnName="id")
*/
private $order;
// ... //
UserPricingOption
エンティティ
/**
* UserPricingOption
*
* @ORM\Table(name="user_pricing_option")
* @ORM\Entity
* @ExclusionPolicy("all")
*/
class UserPricingOption
{
/**
* @var integer
*
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
// ... //
/**
* @ORM\OneToOne(targetEntity="OrderItem", inversedBy="userPricingOption")
* @ORM\JoinColumn(referencedColumnName="id")
*/
private $orderItem;
// ... //
ので、生成されたテーブルは次のようになり
OrderItem
エンティティ:
だから、私は、私が現在持っているものを示してみましょう
order_item
テーブルを
* `id` 5
user_pricing_option
テーブル
* `id` 12
* `order_item_id` 5
だから今、私は次の操作を実行しようとしています: :
echo $orderItem->getId(); // gives 5, `GOOD`
echo $orderItem->getUserPricingOption()->getId(); // gives 5 `BAD` (completely different user_pricing_option row), it should return 12.
を私は真剣に、なぜ生Doctrineのクエリを見つけてください、ということです見当がつかないクエリには上の例より多くの情報が含まれています。
SELECT t0.id AS id_1, t0.guid AS guid_2, t0.created_at AS created_at_3, t0.modified_at AS modified_at_4, t5.id AS id_6, t5.guid AS guid_7, t5.created_at AS created_at_8, t5.modified_at AS modified_at_9, t5.user_id AS user_id_10, t5.order_item_id AS order_item_id_11, t5.pricing_option_id AS pricing_option_id_12, t13.id AS id_14, t13.guid AS guid_15, t13.created_at AS created_at_16, t13.modified_at AS modified_at_17, t13.user_id AS user_id_18, t13.order_item_id AS order_item_id_19, t13.product_variant_id AS product_variant_id_20, t0.order_invoice_id AS order_invoice_id_21, t0.order_id AS order_id_22 FROM order_item t0 LEFT JOIN user_pricing_option t5 ON t5.order_item_id = t0.id LEFT JOIN user_product_variant t13 ON t13.order_item_id = t0.id WHERE t0.order_id = ? [131]
そこで、基本的$orderItem->getUserPricingOption()->getId()
は常に$orderItem->getId();
誰もがおそらく何が起こっているかを見るのと同じIDを返しますか?