Skip to content

Instantly share code, notes, and snippets.

View rela589n's full-sized avatar

Yevhen Sidelnyk rela589n

View GitHub Profile
@rela589n
rela589n / source.php
Last active April 3, 2024 11:13
Symfony Doctrine Type Dependency Injection
// Doctrine Type
final class YourCustomType extends Type
{
public const NAME = 'your_custom_type';
private YourCustomService $yourCustomService;
public function setYourCustomService(YourCustomService $yourCustomService): void
{
@rela589n
rela589n / gist:4abc6b61ce790057fe25dcbfa9d036e3
Created March 25, 2024 15:09
Doctrine orm Joined table inheritance LOCK FOR UPDATE
class ForUpdateOfTableWalker extends SqlWalker
{
public const FOR_UPDATE_OF_TABLE = 'ForUpdateOfTable';
public function walkSelectStatement(SelectStatement $AST): string
{
$sql = parent::walkSelectStatement($AST);
/** @var array $hint */
$hint = $this->getQuery()->getHint(self::FOR_UPDATE_OF_TABLE);
@rela589n
rela589n / services.yaml
Created March 6, 2024 14:59
Symfony Tagged Locator
services:
routable.event.bus:
class: Symfony\Component\Messenger\RoutableMessageBus
arguments:
- !tagged_locator { tag: 'messenger.bus', index_by: 'id' }
- '@event.bus'
@rela589n
rela589n / gist:cc2929c18c2655f6d22b2cd7b0a0e658
Created December 7, 2023 19:32
Remove event listeners with javascript
document.body.removeEventListener('mousedown',getEventListeners(document.body).mousedown[0].listener)
document.removeEventListener('copy',getEventListeners(document).copy[0].listener)
document.removeEventListener('paste',getEventListeners(document).paste[0].listener)
@rela589n
rela589n / CategoryRepository.php
Created December 7, 2023 09:05
postgresql dfs preorder tree traversal
public function findCategories(): array
{
// dfs preorder tree traversal
$sql = <<<'SQL'
WITH RECURSIVE preorder_categories_traversal
AS (SELECT category.id,
category.parent_id,
ARRAY [ROW (category.sort_order,category.id)] AS path
FROM categories category
@rela589n
rela589n / exists.php
Created November 6, 2023 14:05
Doctrine select EXISTS query
public function hasEntities(): bool
{
$qb = $this->createYourQueryBuilder();
$qb->select((string)$qb->expr()->literal('1'))
->setMaxResults(1);
$result = $qb->getQuery()->getOneOrNullResult();
return null !== $result;
@rela589n
rela589n / |Controller.php
Created October 26, 2023 15:02
Symfony streaming responses from the file system
return new StreamedResponse(
static fn (): int => fpassthru($photo->stream),
headers: [
'Content-Type' => $photo->mimeType,
'Content-Length' => $photo->fileSize,
'Content-Disposition' => HeaderUtils::makeDisposition(
HeaderUtils::DISPOSITION_INLINE,
$photo->baseName,
),
],
@rela589n
rela589n / load_table.sh
Created October 24, 2023 09:17
Load table from SQL-dump
zcat ./table-dump.sql.gz | docker compose exec -T --env PGPASSWORD=qwerty postgresql_container psql -h postgresql_container -U postgres_user "database_name"
@rela589n
rela589n / repository.php
Created September 28, 2023 07:14
doctrine hydrate single column result
$queryBuilder = $this->createQueryBuilder('journal');
$queryBuilder
->select('journal.number');
/** @var array $result */
$result = $queryBuilder->getQuery()->getSingleColumnResult();
@rela589n
rela589n / services.yaml
Created July 17, 2023 14:06
Doctrine schema filter using service declaration
app.dbal.schema_filter:
class: Doctrine\Bundle\DoctrineBundle\Dbal\RegexSchemaAssetFilter
arguments: [ '#^(?!(table1|table2)$).*#' ]
tags:
- { name: doctrine.dbal.schema_filter }