Doktrin DQL params'ı geçen yürütmek

1 Cevap php

Ben Doktrini bu DQL kullanılan

$q->update('product')
->set('quantity','?')
->where('id=?');
$q->execute(array(20,5));

Ben sorgu için sunucu ve bu oluşturulan sql kontrol

    UPDATE product SET quantity = '20', updated_at = '5' 
WHERE (id = '2010-04-26 14:34); 

Yani argümanlar doğru yerlerde değil neden bilmek gerekir?

1 Cevap

Ben birkaç gün önce aynı hata kendimi yakalandı. Ben Timestampable davranış bir hata nedeniyle inanıyorum. Ben bunu Ürün modelinde etkin ve Doktrin (SET) güncellemek için alanların serisine updated_at alan ekler ve burada yan tümcesinde (bundan sonra SQL parametreleri sahip olduğu gerçeğine dikkat gelmez var tahmin ediyorum .) Timestampable dahil değil çünkü seçtiğinde yaparken bu hata geliyor asla.

Ben buldum tek çözüm sorgu oluşturmak yerine execute dizi parametresi ve Doktrin karışık almazsınız gibi parametreleri temin etmektir. Bu gibi:

$q->update('product')
 ->set('quantity', 20)
 ->where('id = ?', 5);
$q->execute();

Farklı değerlerle aynı sorguyu birçok kez çalıştırmak gerekiyorsa Ancak, ayrı hazırlamak ve performans avantajlarını kaybetme olurdum aşamalarını yürütmek. Bu tek çözüm görünmüyor.

Potentially better solution without performance loss: I have not verified this, however, I would hope that bug would not surface if you used named parameters instead of the anonymous ? placeholders. Doctrine's support for named parameters is described here: http://www.doctrine-project.org/documentation/manual/1_2/en/dql-doctrine-query-language

EDIT: Ben beri adlandırılmış parametreler ve ne yazık ki böcek kalıntıları ile alternatif bir yaklaşım denedi. Doktrin aynı sorguda adlandırılmış ve anonim parametreleri karışmaz söyleyerek bir hata verir. Bu gerçekten IMO uzun zaman önce sabit olmalıdır.