Vì vậy, tôi đã bỏ lỡ bộ não của mình một thời gian. Trong Doctrine không có khái niệm về việc tham gia đúng. Tôi biết rằng bạn có thể sử dụng một tham gia trái như một tham gia đúng nhưng tôi không thể tìm ra nó cho ví dụ của tôi đó là lý do tại sao tôi ở đây.Cách sử dụng phép nối trái giống như tham gia ngay trong Doctrine
Ví dụ của tôi: Tôi có một thực thể trong Học thuyết có mối quan hệ một-một với chính nó được gọi là "cha mẹ". Tôi đang cố gắng để có được tất cả các thực thể và con cái của họ (nếu chúng tồn tại) mà không có bản sao.
Với quyền tham gia này là đơn giản bởi vì tôi có thể nói:
SELECT parent.*, child.*
FROM table child
RIGHT JOIN table parent ON parent.id = child.parent_id
WHERE parent.parent_id is null;
Nhưng sử dụng một trái tham gia Tôi trả lại kết quả mà tôi không thể tìm ra những gì mệnh đề where nên để lọc chúng ra.
Vì vậy, câu hỏi của tôi là "Học thuyết có một cách để làm đúng tham gia" hay "Làm cách nào tôi có thể sử dụng thao tác tham gia bên trái như tham gia đúng"?
--- EDIT ---
Các bạn là chính xác những gì bạn đang nói về việc thay đổi thứ tự của bảng tôi lựa chọn tuyệt vời nhưng tôi sử dụng Doctrine, vì vậy các mối quan hệ làm từ trẻ> mẹ. Đây là câu hỏi học thuyết của tôi:
My Entity:
/**
* @Entity
* @Table(name="entity")
*/
class Entity
{
...
/**
* @OneToOne(
* targetEntity="Entity",
* fetch="EAGER"
*)
* @JoinColumn(name="parent_id", referencedColumnName="id")
*/
private $parent;
...
}
Ðạo của tôi lựa chọn công bố:
$em->createQueryBuilder()
->select(array('child', 'parent'))
->from('Entity', 'child')
->leftjoin('child.parent', 'parent')
->orderBy('parent.id','asc')
->getQuery()
->execute();
Tôi không chắc chắn như thế nào và nếu tôi có thể chuyển đổi thứ tự của bảng. Tôi cũng đã cố gắng tạo ra một mối quan hệ khác từ thực thể cho chính nó (giống như cách tôi đã làm cha mẹ) nhưng gọi nó là con. Nhưng khi tôi cập nhật db với lược đồ lược đồ mới đã ném lỗi.
Bất kỳ ý tưởng nào? Và Cảm ơn bạn đã phản hồi nhanh!
--- EDIT 2 ---
Left tham gia sql và kết quả:
SELECT child.id, child.changed_timestamp, child.parent_entity_id, parent.id,
parent.changed_timestamp, parent.parent_entity_id
FROM content child
LEFT JOIN content parent ON child.parent_entity_id = parent.id
ORDER BY parent.id ASC
child_id child_timestamp parent_entity_id parent_id parent_timestamp parent_entity_id
1 8/16/12 20:29 NULL NULL NULL NULL
7 9/20/12 16:07 NULL NULL NULL NULL
8 8/17/12 16:08 NULL NULL NULL NULL
9 8/17/12 20:44 NULL NULL NULL NULL
10 8/17/12 21:03 NULL NULL NULL NULL
11 8/17/12 21:17 NULL NULL NULL NULL
194 9/19/12 9:58 NULL NULL NULL NULL
195 9/20/12 10:38 NULL NULL NULL NULL
196 9/19/12 11:58 NULL NULL NULL NULL
197 NULL 196 196 9/19/12 11:58 NULL
200 9/20/12 16:02 1 1 8/16/12 20:29 NULL
202 9/20/12 16:35 NULL NULL NULL NULL
204 9/21/12 8:41 NULL NULL NULL NULL
206 NULL 204 204 9/21/12 8:41 NULL
tham gia phải kết quả:
SELECT child.id, child.changed_timestamp, child.parent_entity_id, parent.id,
parent.changed_timestamp, parent.parent_entity_id
FROM content child
RIGHT JOIN content parent ON child.parent_entity_id = parent.id
WHERE parent.parent_entity_id is null
ORDER BY parent.id ASC
child_id child_timestamp parent_entity_id parent_id parent_timestamp parent_entity_id
200 9/20/12 16:02 1 1 8/16/12 20:29 NULL
NULL NULL NULL 7 9/20/12 16:07 NULL
NULL NULL NULL 8 8/17/12 16:08 NULL
NULL NULL NULL 9 8/17/12 20:44 NULL
NULL NULL NULL 10 8/17/12 21:03 NULL
NULL NULL NULL 11 8/17/12 21:17 NULL
NULL NULL NULL 194 9/19/12 9:58 NULL
NULL NULL NULL 195 9/20/12 10:38 NULL
197 NULL 196 196 9/19/12 11:58 NULL
NULL NULL NULL 202 9/20/12 16:35 NULL
206 NULL 204 204 9/21/12 8:41 NULL
Tôi muốn đạt được kết quả với quyền join sql. Các thực thể cha mẹ độc đáo với các con liên kết của chúng (nếu chúng tồn tại) nhưng tôi cần đạt được nó bằng cách sử dụng học thuyết. Cảm ơn một lần nữa!
'con QUYỀN THAM GIA tableparent TRÊN parent.id = child.parent_id' giống với' tableparent LEFT JOIN child ON parent.id = child.parent_id' –
Vui lòng cung cấp dữ liệu mẫu và đầu ra mong muốn. – RedFilter
Đã thêm :) Cảm ơn! –