Thawne
builders это моя таблица в БД
Thawne
Аааа, вроде понял. Спасибо
Alex
Erbol builders это то, что вы кидаете при рендеринге через view(‘your_template.html.twig’, [‘builders’ => $builders]) (поэтому это не таблица в бд, а данные, которые вы отдаете) И как сказал @franzkafkiansky это инструкция просто перебирает переданный массив, на каждой итерации подставляя в builder элемент массива )
Dmitriy
всем привет как правильно приготовить symfony serializer, чтобы зависмые сущности тоже сериализовывал, мне нужно сериализовать вот такой json: { "name": "listItems", "items": [ { "name": "1" }, { "name": "2" }, { "name": "3" } ] }
Dmitriy
есть Enity ListItems и Item, вызываю так: deserialize($string,ListItems::class,'json')
Dmitriy
Поле items пустой массив в выхлопе
Dmitriy
добавил в ListItem вот такой метод: public function setItems(array $items) { foreach ($items as $item) { $this->items->add($item); } } и заработало 😃
Yuri
тип какой проставлен на items ?
Yuri
@var array|null ? или объект ?
Dmitriy
Так он вроде сериализует. Дефолтный сериалайзер , симфоневский?
уже решил вопрос, если коллекция элементов сериалайзер не воспринемает addElement, нужно добавить setElemets(array $elements) метод, во всяком случае у меня так
Yuri
ну хз. у меня так class Order { / * @var ArrayCollecton|Product[] */ private $products; / * @param ArrayCollection|Product[] $products */ public function setProducts($products){ $this->products=$products; } }
Yuri
и все работает
Yuri
должно попадать в ObjectNormalizer при serialize|deserialize
Yuri
ток я еще проверку делаю в методе setProducts на дубли примерно так $criteria = Criteria::create()->where(Criteria::expr()->eq('product', trim($product->getProduct()))); /** @var Product $checkProduct */ $checkProduct = $this->products->matching($criteria)->first(); if($checkProducts){ обновление данных в существующих items }else{ $this->products->add($product); // добавляем новый item }
Yuri
в $product->getProduct() - артикул
Yuri
а ну и засетить связь нужно у $product в foreach $product->setOrder($this);
Alex
А зачем вы в сущности лезете в базу?
Yuri
не лезу. где я в бд лезу ?
Yuri
Criteria::create()->where(Criteria::expr()->eq('product', trim($product->getProduct()))); - это поиск по коллекции
Anonymous
а давайте банить за куски кода в чате а не на pastebin?
Yuri
😂👍 а давайте
Yuri
оскорбляет чтоли?
Anonymous
читать не возможно, а мешает и отбивает всякое желания помочь
Anonymous
правила хорошого тона слышал такую вещь?
Yuri
а ну да, слышал. по правилам хорошего тона - можно было просто сказать, - сделать замечание ) а ты банить сразу. ) фу таким быть . и я не просил помощи, я поучавствовал в помощи.
Anonymous
я просто предложил
Anonymous
хахс
Aleksandr
Фу таким быть, код текстом кидать, вот если бы фотку скрина!
Aleksandr
Внутри doc
Katulos
а давайте банить за куски кода в чате а не на pastebin?
Можно ещё банить за такие предложения 😊
Кирилл
Внутри doc
а док надо скачать с файлообменника конечно же
Aleksandr
Банить никого не будем, но все таки код лучше линками
Alexey
а док надо скачать с файлообменника конечно же
фотка экрана с телефона? если нет, то смотреть не будем
Thawne
Всем привет, я хотел спросить. Как брать данные из разных таблиц? Я должен создать еще 1 Entity? или как?
Anonymous
У тебя две сущности связанные и данные о них в разных таблицах
Anonymous
Приведи пример, а то не понятно
Thawne
У меня пока 1 сущность, и бд, там 3 таблицы. builders buidings и buildings image, как вывести данные из этих таблиц. Еще таблицаb buildings связана с builders по Id
Alex
Смотрите, если они все связаны, то можно все вытащить через какую-нибудь сущность, НО это накладно столько обращений в бд, потому что вам возвращаются не объекты, а прокси и только обращение к конкретному свойству снова полезет в базу и тогда вытащит данные фактически, поэтому если вам нужны все эти данные сразу, лучше всего написать запрос в репозитории и вытащить все сразу в 1 запросе, тогда будет только 1 запрос
Alex
Если же они нужны не все, тогда просто вытаскивайте конкретную сущность, не делайте общий запрос, чтобы не тащить лишние зависимости
Yaro
Привет всем, кто то может посоветовать статью про правильный MVC в симфони. Я до этого на слиме пилил, и выносил ВСЮ бизнес логику в сервисы, контроллер отвечал только за то какой сервисс вызвать. Но судя с мануалов по симфони, и с видео уроков в симфони так не принято, тоесть в сервисы выносится glue code, между контроллером и орм. Хочу в этом розобратся до того как гавнокодит.
Alex
Привет всем, кто то может посоветовать статью про правильный MVC в симфони. Я до этого на слиме пилил, и выносил ВСЮ бизнес логику в сервисы, контроллер отвечал только за то какой сервисс вызвать. Но судя с мануалов по симфони, и с видео уроков в симфони так не принято, тоесть в сервисы выносится glue code, между контроллером и орм. Хочу в этом розобратся до того как гавнокодит.
“контроллер отвечал только за то какой сервисс вызвать.”  - примерно так и есть, но смотря про какую логику вы говорите. Каждый класс в системе работает со своими данными и выполняет какуют-то логику соответственно (сорри за тавтологию). Не используйте анемичные модели и следуйте принципу единой ответственности. Тогда сервис в вашем случае будет неким клеем, но не между орм и контроллером, а между разными объектами верхнего уровня. Также советую не работать с орм напрямую в сервисах, а создать репозитории для этого (свои для гибкой настройки)
Alex
https://elisdn.ru/blog/page-3 статьи, начиная с Проектирование сущностей предметной области и заканчивая Доменные сущности и Doctrine ORM, возможно ответят на все ваши вопросы
Yaro
Спасибо огромное за розвернутый ответ
Alex
Есть еще неплохая книга year with symfony, она есть на русском. Можно скачать беспалтно, тоже можно какие-то советы подсмотреть на досуге
Yaro
ооо это вообще найс
Руслан 🇲🇨
Alex
Ребята, что не так? Php 7.3
Alexander
symfony browser-kit с четвертой версии на symfony 3.4 не станет
Alex
symfony browser-kit с четвертой версии на symfony 3.4 не станет
А что в этой ситуации можно сделать?
Alexander
Если browser-kit есть на symfony 3.4 то в composer.json задать версию browser-kit которая станет на 3.4
Dmitriy
Сервис можно удалить как-то? устанавливается бандлом, но он мне не нужен
Alexey
полагаю, что если какой-то бандл добавил в зависимость, то он ему нужен
Dmitriy
мне не нужен доктриновский property_extractor
Dmitriy
как его отключить?
Alexey
composer remove symfony/property-info пробовали?
Dmitriy
крч, у меня на вход число в двух вариантах может прийти, int и string, я сериализую symfony serialazer компонентом, в чем суть: прилететь таких свойств может в один объект много и почему-то PhpDocExtractor для последнего свойства тип не выдает и перекидывает на DoctrineExtractor Проблемный метод: /** * @param int|string $sex * @return AgeGroup */ public function setSex( $sex): self { $this->sex =(int) $sex; return $this; }
Dmitriy
Может кто сталкивался с такой проблемой?
Alex
Может стоит попробовать использовать строгий тип?
Dmitriy
Может стоит попробовать использовать строгий тип?
Низя, много старых клиентов отвалится
Alex
сделайте адаптер
Dmitriy
сделайте адаптер
все числовые строки к int приводить чтоль?
Alex
Просто попробовать. У вас как я понимаю не определяется тип свойства
Alex
в целях теста
Alex
попробуйте сделать строгий тип для всех и проверить, потому что это странно
Alex
вы делаете каскад
Alex
но тип не определен
Alex
а вы сериализуете весь объект?
Alex
А можно примерный код?
Dmitriy
А можно примерный код?
https://pastebin.com/2EnW9wxa вот так тело разбираю
Dmitriy
А можно примерный код?
https://pastebin.com/578fEguu сильно упрощенный объект который вызывает ошибку
Alex
Так, а у вас гетеры в классе возвращают числа?
Dmitriy
Так, а у вас гетеры в классе возвращают числа?
да, я во всех сеттерах привожу к int, геттеры null или int возвращают