Bir varlık havuzundan bir sonuç kümesini filtrelemek için Lexik Form Filtre Paketi kullanıyorum. Bir Varlığın Tüm Özelliklerinde Anahtar Kelime Bul, Symfony2
namespace AppBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Lexik\Bundle\FormFilterBundle\Filter\Form\Type as Filters;
class ItemFilterType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', Filters\TextFilterType::class)
->add('description', Filters\TextFilterType::class);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'csrf_protection' => false,
'validation_groups' => array('filtering')
));
}
public function getBlockPrefix()
{
return 'item_filter';
}
}
bu filtrenin varsayılan davranışı gereğince, filtre koşulları taktıktan sonra inşa edilmiştir nihai sorgu aşağıdaki
koşul yapıya sahip olacaktır.
SELECT * FROM AppBundle\Entity\Item a WHERE
a.name = 'nameValue'
AND a.description = 'descriptionValue'
(geleneksel dizin yapısı varsayalım)
Benim görevim filtre forma bir daha fazla alan eklemektir. Bu herhangi bir özelliğe eklenmeyecektir. Filtre formunun gönderilmesi üzerine, bu giriş, varlığın tüm özellikleri ile aranmalıdır. Diğer bir deyişle, ortaya çıkan sorgu böyle bir şey olmalı.
SELECT * FROM AppBundle\Entity\Item a WHERE
a.name LIKE '%nameValue%'
OR a.description LIKE '%descriptionValue%'
o eğer daha iyidir bu yüzden, Lexik Filtre filtre verilerini (oturum kullanılarak) tutar şekilde uymaları tercih
(anahtar kelimeler VEYA ve burada GİBİ. Unutmayın) Bunu bu filtreyi kullanarak başarabilirim. Ama ne tür bir özel alan yaratmam gerektiğine ve durum oluşturucu mantığını nasıl değiştirebileceğime dair bir fikrim yok. Bu anahtar kelime belirli bir mülke eklenmediğinden, bu filtre kullanılarak bu mümkün mü?
Sen dinleyicisi kullanmıyorsun? – darkomen
Yorumunuz için teşekkür ederiz @darkomen. Filtreyi uygulamak için varsayılan yolu geçersiz kılmak için bu yaklaşımı aldım. Altta yatan varlık ne olursa olsun meta verileri kullanarak durumu oluşturma problemim hala var. –