Trình nghe của tôi là một phần của hành vi, nên xóa tất cả các kiểm tra is_published trong mệnh đề where của bất kỳ truy vấn chọn nào được gọi. Việc thêm một phần vào một mệnh đề thực sự dễ dàng, nhưng làm thế nào để loại bỏ một mệnh đề.Học thuyết: Cách loại bỏ một phần của mệnh đề where từ truy vấn chọn bên trong người nghe (preDqlSelect)?
Có một số chức năng như Doctrine_Query->removeDqlQueryPart('where')
, nhưng mà loại bỏ hoàn chỉnh mệnh đề where, trong khi tôi chỉ cần 'is_published = ?'
phần phải được loại bỏ.
Tuy nhiên, tôi có thể xử lý thủ công bằng cách nào đó bằng regex hoặc thứ gì đó. Nhưng phần khó khăn là, làm thế nào để loại bỏ các tham số đại diện bởi '?' từ mảng tham số tương ứng (có thể truy xuất bởi Doctrine_Query->getRawParams()
).
Vì vậy, tôi hỏi, có cách nào sạch để chuyển đổi loại truy vấn:
...FROM Video v WHERE v.is_published = ? AND v.start_date < ? AND v.end_date > ?
này tước một và không rối tung lên các params đại diện bởi các dấu hỏi:
...FROM Video v WHERE v.start_date < ? AND v.end_date > ?
Đây tất nhiên chỉ là một ví dụ đơn giản, các truy vấn của tôi phức tạp hơn một chút. Thật không may là tôi bị mắc kẹt với doctrine 1.0.x vì khung công tác symfony.
Cảm ơn vì điều đó. Ví dụ đi một chặng đường dài :) – Aeolun
tận hưởng và tận hưởng :) –
Giải pháp này hoạt động cho mệnh đề "where" nhưng không ví dụ mệnh đề "groupBy": Trong trường hợp này getParts() phải được thay thế bằng: ... $ qb_group_by_part = $ qb-> getDqlPart ('groupBy'); $ qb_group_by_part = isset ($ qb_group_by_part ["phần"])? $ qb_group_by_part ["parts"]: mảng(); .. – Tsounabe