From c53618dc966d953aa3121fa12084e4c5e3a95e0c Mon Sep 17 00:00:00 2001 From: Tuhin Bepari Date: Tue, 24 Feb 2026 11:35:39 +0600 Subject: [PATCH 1/2] Add Section for Symfony 7.4+ --- README.md | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/README.md b/README.md index fa9ee16..6d9c7b7 100644 --- a/README.md +++ b/README.md @@ -109,6 +109,57 @@ public function down() Use `vector_ip_ops` for inner product and `vector_cosine_ops` for cosine distance +### Symfony (>=7.4) + + +Register types in `config/packages/doctrine.yaml` +```yaml +doctrine: + dbal: + types: + vector: Pgvector\Doctrine\VectorType + halfvec: Pgvector\Doctrine\HalfVectorType + sparsevec: Pgvector\Doctrine\SparseVectorType +``` + +Enable the extension in a migration +``` +php bin/console make:migration +``` +```php +public function up(Schema $schema): void +{ + $this->addSql('CREATE EXTENSION IF NOT EXISTS vector'); +} +``` +``` +php bin/console doctrine:migrations:migrate +``` + +Use the `vector` type in your entities +```php +use Pgvector\Vector; + +#[ORM\Entity] +class Item +{ + #[ORM\Column(type: 'vector', length: 3)] + private Vector $embedding; +} +``` + +Query for nearest neighbors +```php +$results = $entityManager->createQuery( + 'SELECT i FROM App\Entity\Item i ORDER BY cosine_distance(i.embedding, :embedding)' +) +->setParameter('embedding', new Vector([1, 2, 3])) +->setMaxResults(5) +->getResult(); +``` + +Also supports `l2_distance`, `max_inner_product`, `l1_distance`, `hamming_distance`, and `jaccard_distance` + ### Doctrine Install the package From 89f12db4726f48dd982bcb23f199831fc3a55913 Mon Sep 17 00:00:00 2001 From: Tuhin Bepari Date: Tue, 24 Feb 2026 11:54:41 +0600 Subject: [PATCH 2/2] Adding dql custom functions --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 6d9c7b7..b932df1 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,16 @@ doctrine: vector: Pgvector\Doctrine\VectorType halfvec: Pgvector\Doctrine\HalfVectorType sparsevec: Pgvector\Doctrine\SparseVectorType + + orm: + dql: + string_functions: + cosine_distance: Pgvector\Doctrine\CosineDistance + l2_distance: Pgvector\Doctrine\L2Distance + max_inner_product: Pgvector\Doctrine\MaxInnerProduct + l1_distance: Pgvector\Doctrine\L1Distance + hamming_distance: Pgvector\Doctrine\HammingDistance + jaccard_distance: Pgvector\Doctrine\JaccardDistance ``` Enable the extension in a migration