2012-08-14 34 views
6

tôi có thừa kế bảng đơn giản trên entites tôi, nói somehing như:thuyết 2 - đơn bảng thừa kế - bất động sản tiếp cận của thực thể con

/** 
* @InheritanceType("SINGLE_TABLE") 
* @DiscriminatorColumn(name="type", type="string") 
* @DiscriminatorMap({"base"="BaseArticle", "extended"="ExtendedArticle"}) 
*/   
class BaseArticle extends \Models\BaseModel{ 
    ... 
} 
class ExtendedArticle extends BaseArticle{ 
    /** 
    * @column(type="string") 
    */ 
    protected $extendedProperty; 
} 

tôi cần phải làm một truy vấn trên tất cả các loại bài viết này, nhưng trong một số loại hạn chế các truy vấn bằng một số tài sản, có nghĩa là trong ExtendedArticle mở rộng, ví dụ:

SELECT a FROM BaseArticle a WHERE (a INSTANCE OF BaseAricle) OR (a INSTANCE OF ExtendedArticle AND a.extendedProperty = "xy") 

mà mang lại cho tôi folowing ngoại lệ:

[Semantical Error] line 0, col 406 near 'extendedProperty="xy"))': Error: Class Models\Articles\BaseArticle has no field or association named location 

Vì vậy, câu hỏi là, làm cách nào để truy cập các thuộc tính của trẻ trong truy vấn đến lớp cha mẹ?

Trả lời

0

Bạn không thể. Dưới đây là một cách giải quyết:

SELECT a 
FROM BaseArticle a 
WHERE 
    a INSTANCE OF BaseAricle 
    OR a.id IN (
     SELECT ea.id 
     FROM ExtendedArticle ea 
     WHERE ea.extendedProperty = "xy" 
    ) 
+0

Cảm ơn, nhưng tôi thực sự không thích ý tưởng thực hiện truy vấn con không hiệu quả như vậy đối với điều đơn giản. Trong SQL, đây là nhiệm vụ thực sự đơn giản, dường như với tôi rằng học thuyết cần một số hỗ trợ riêng cho việc này. – DaveLister

0

Tôi đã giải quyết điều này bằng cách thêm vào $extendedPropertyBaseArticle và sử dụng getters/setters để che giấu một cách hiệu quả tài sản trong BaseArticle thực thể và vòng đời của tôi callbacks để xử lý NULLABLE này. Nhưng đây thực sự là giải pháp tồi vì sự kế thừa gần như vô nghĩa.

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