2011-07-29 39 views
7

Tôi đang cố gắng tạo ánh xạ OneToOne tùy chọn trong Doctrine.Học thuyết tùy chọn Bản đồ OneToOne

Tôi có một bảng với tất cả các thành phố và mã zip có sẵn (bảng này không nên thay đổi), và tôi có một bảng với các địa chỉ và một thành phố được ánh xạ. Nhưng đôi khi tôi không muốn thêm Thành phố vào Địa chỉ của tôi ngay từ đầu (có thể sau này). Nhưng khi tôi không thêm một thành phố vào địa chỉ tồn tại trên địa chỉ cung cấp cho tôi một ngoại lệ phản ánh vì không có đối tượng như 'null', mà nên được de City đối tượng.

Tôi không muốn thêm thành phố trống mỗi lần vào cơ sở dữ liệu, vì không nên thêm hoặc xóa nội dung nào vào bảng thành phố.

Mọi đề xuất? Hoặc tôi đang thiếu gì?

class Address{ 
/** 
* @OneToOne(targetEntity="City") 
* @JoinColumn(name="city_id", referencedColumnName="id") 
*/ 
    private $city = ''; 

giải pháp có thể tôi coi:

  • Tạo một đối tượng thành phố có sản phẩm nào trong db và gán này luôn với các đối tượng Địa chỉ mới được tạo ra (có thể gây ra rất nhiều overhead)
  • Tạo Mối quan hệ ManyToMany với một mảng thành phố, vì vậy có thể có 0 hoặc nhiều thành phố được thêm vào (tôi có thể hạn chế vô số thành phố trong đối tượng Địa chỉ của tôi) nhưng sau đó tôi cần một bảng lập bản đồ ...

Trả lời

16

Chỉ cần thêm nullable=true vào @JoinColumn chú thích

+0

bất kỳ cách nào để thực hiện công việc này cho phép nối nhiều cột (tức là @JoinColumns). Tôi đã thử nhưng không may mắn ... –

+0

Thật không may nó tạo truy vấn INSERT INTO với tham số trống và gây ra lỗi: ''INSERT INTO message_conversation (title, lastMessage_id) VALUES (?,?)' Với params [43]' - thiếu tham số thứ hai (một đến một). – Athlan

+0

Nó không làm việc cho tôi. Tôi đã thêm nullable = true nhưng không thành công. Có anyway để làm cho một đến một mối quan hệ như optionnal? – skonsoft

Các vấn đề liên quan