Павел
Павел
Или где то clean наоборот
Александр
$entityManager = $this->getEntityManager();
if (!$entityManager->isOpen()) {
$entityManager = $entityManager->create(
$entityManager->getConnection(),
$entityManager->getConfiguration()
);
}
$entityManager->persist($order);
$entityManager->getUnitOfWork()->commit($order);
Александр
как бы пол года без сбоев и только при добавлении нового поля вчера *бнуло
Александр
за эти пол года добавлено полей десяток разного типа и всегда по одному принципу
Юра
Там нет такого что к примеру энтити менеджер пересоздается а ордер старый?
Юра
Новый em ничего не будет знать про ордер который прилетел к нему из старого эм по идее
Юра
Ещё такое бывает если где-то идет clean, и потом используется энтити которая была получена до клин
Юра
И что за использование commit
Юра
Напрямую из Uow
Юра
Первый раз такое вижу
Юра
У меня такое ощущение что при добавлении поля внутри эм возникает ошибка, после чего он закрывается, ты его пересоздаешь и потом персист эрор
Александр
напрямую clean ни где нет, если только под капотом в UOW делает (не капался глубоко в нем).
короче я так и не понял, что с этим было.
откатил все назад, до изменений, сделал заново все эти действия все отрабатывает на ура, сравнил 2 коммита, одинаковые то что был не рабочий, тот что рабочий.
самая херня, что тесты все проходил (запись по одиночке идет), зато теперь есть тест второй, симулирующий очередь)
Юра
Главное что ты нашел плюсы в этой ситуации
Юра
Далеко пойдешь )
Alexander
Вопрос по работе с доктриной. Есть поле bool
<field name="orderExists" type="boolean"/>
В конретном случае я использую MySQL и по факту в этом поле храниться 1 / 0
Теперь мне необходимо построить запрос.
public function findForTest(bool $otherExists): array
{
$query = $this->createQueryBuilder('r')
->where('r.orderExists = :exists')
->setParameter('exists', $otherExists);
return [];
}
Правильно ли в данном случае передавать тип bool или, по сути, мне придется приводить к int?
Null
true и false самим мусклом приравнивается к 1 и 0
Alexander
пасиб
Null
Опять же qb прекрасно сам во всем разберется) Чего и как выставить.
Alexander
Отлично... Я подозревал, но хотел убедиться :)... это мой первый подход к симфони, доктрине и его qb :)
Kirill
Всем привет! Подскажите, как работает iterate в доктрине?
$results = $this
->createQueryBuilder('e')
->andWhere('...')
->getQuery()
->iterate();
while ($results->next() !== false) {
...
}
Это доктрина на каждой итерации цикла запрос в БД сделает или как?
Сергей
запрос она один делает, просто не все сразу гидрирует
Kirill
Понял. Спасибо. А есть ли разница между кодом выше вот этим?
$query = $this->getEntityManager()->getConnection()->executeQuery($sql, $parameters, $types);
while (($row = $query->fetchAssociative()) !== false) {
yield $row;
}
Павел
Kirill
а вот какой профит между циклом с yield и fetchAllAssociative?
Kirill
Но ведь запрос в базу уже сделан и все результаты и так в памяти
Kirill
В общем самый экономный вариант - это вот так, верно?
$iterator = $this->createQueryBuilder('e')
->getQuery()
->iterate();
foreach ($iterator as $row) {
yield $row[0];
}
Павел
Кстати, может кто подскажет, ведь по сути, когда мускул сделал запрос, но мы еще не фечнули, результат будет в памяти пыхи или мускула?
Павел
Kirill
ну если надо объекты получить
Павел
Ну если хотите сущность - тот этот, да
The Ant
The Ant
помню ебался с этим говном )
Юра
Если честно я не вижу в протоколе мускуля параметра по поводу буферизации
Юра
А есть.. у prepared stmts
Юра
По сути просто используется курсор
Юра
Вместо загрузки всех строк в память. Только доктрина наверное не умеет с этим работать если мы говорим про орм
Юра
Потому что как минимум рилейшены построчно не сгидрировать
The Ant
дохтрину на больших объемах тока булками юзать, с постраничным итератором
Павел
Konstantin
не до конца понятно зачем. зачем тебе типа 100к сущностей?
Anton
Anton
Ну, то есть можно себе представить что нужно обработать 100к записей, но чтобы они все единовременно в памяти лежали - что-то наверное идёт не так)
Юра
Сколько пхпдоку лет?
Юра
Как можно так долго делать проект, и в итоге получилось такое убогое гно
Юра
Что даже на мобиле не отображается нормально
Nikolay
Anton
А зачем такое количество
Загрузить данные из xml-ки. Я как-то делал сервис, так там регулярно попадались xml-ки под полмиллиона товаров)
Nikolay
Юра
Загружать можно по одной сущности
Юра
И чистить entity manager
Юра
Если повезёт память не утечет )
Anton
Не, так я про это и говорил) Что в целом обрабатывать такой объем - легко, а вот держать в памяти сразу всё - странновато)
Виталий
Всем привет! Вопрос по partial селекту, если пытаюсь забрать связь oneToOne, то ловлю ошибку Error: There is no mapped field named, я так понял, это потому что partial смотрит на конкретную сущность, а у меня JoinColumn прописан в связанной, если перенести JoinColumn в нужную сущность, то падает на нулевой релейшенах, хотя в JoinColumn стоит по дефолту nullable=true, встречался кто-то с такой проблемой?
Kirill
Всем привет! А вы пишете интерфейсы для сервисов? И если да, то зачем?
Konstantin
слишком сложный и объемный вопрос
Konstantin
да пишем, но не всегда. устроит такой ответ?
Юра
Я не пишу
Юра
)
Юра
Двойная работа
Юра
В джаве пишут
Konstantin
если у интерфейса одна и строго одна реализация - то не пишем. нет смысла в липовых интерфейсах, как там этот антипаттерн называется - interface bloating что ли
Kirill
Да, меня как раз интересует, когда одна реализация. Когда много реализация - там все понятно
Konstantin
если вдруг появляется вторая реализация, можно быстро поменять FooService в зависимостях на FooInterface
Konstantin
я по крайней мере придерживаюсь такого принципа
Юра
А как тестить если сервис принимает конкретный класс?
Юра
Я про юнит тесты
Сергей
мокать?
Dmitry
Юра
Типо создаётся наследник класса?
Юра
А как переопределить приватные методы
Konstantin