JOIN kullanarak ve NEREDE zaman Doktrini sorunları

1 Cevap php

Ben basit bir doktrin kodu vardır:

$dql = Doctrine_Query::create()
        ->select('u.ident, u.username, u.email')
        ->from('Users u, u.Attributes ua');
if ($query) {
  $dql->where('u.username LIKE ?', "%$query%")
    ->orWhere('u.name LIKE ?', "%$query%")
    ->orWhere('u.email LIKE ?', "%$query%");
}
$dql->offset($start)->limit($count);
$users = $dql->execute();

Profiler ile, ben Doktrin iki ayrı sorgu olarak çalışmakta olduğunu öğrendim:

SELECT DISTINCT e3.ident FROM users e3 
LEFT JOIN userpolicies e4 ON e3.ident = e4.user_id 
WHERE e3.username LIKE ? OR e3.name LIKE ? OR e3.email LIKE ? LIMIT 20

Params:
Array
(
    [0] => %fam%
    [1] => %fam%
    [2] => %fam%
)

ve

SELECT e.ident AS e__ident, e.username AS e__username, e.email AS e__email FROM users e
LEFT JOIN userpolicies e2 ON e.ident = e2.user_id 
WHERE e.ident IN ('2', '40', '42', '44', '52', '53', '54', '55', '56', '58', '60', '61', '62', '64', '65', '66', '68', '70', '74', '82') AND e.username LIKE ? OR e.name LIKE ? OR e.email LIKE ?

Params:
Array
(
    [0] => %fam%
    [1] => %fam%
    [2] => %fam%
)

Ikinci sorguyu bile 'Kullanıcılar' ilk sorguda seçilir gelen eşleşen sıra sonra nerede koşullar ikinci kez uygular, çünkü bu (yani, ikinci sorgu {[(0)] ile durdurmak gerektiğini tam olarak aklımda ne değildir }). Bu benim vida-yukarı veya Doktrini beklenen davranış mı? Ben doktrin v1.1.6 kullanıyorum.

1 Cevap

Bu sorun Doktrin sürüm 1.2 giderilmiştir gibi gözüküyor. Şimdi geçiş :) sorun için üzgünüm beyler.