• Symfony OneToMany Fetch: Eager with ULID primary key?

    @enigma2030 Автор вопроса
    Формируется вот так
    SELECT t0.id AS id_1, t0.product_id AS product_id_2 FROM image t0 WHERE t0.product_id IN ('01HS0RHTWAVDXTPBV9VZ5W09ME', '01HS0RHTWAVDXTPBV9VZ5W09MM', '01HS0RHTWAVDXTPBV9VZ5W09MV', '01HS0RHTWAVDXTPBV9VZ5W09N3', '01HS0RHTWAVDXTPBV9VZ5W09N9', '01HS0RHTWAVDXTPBV9VZ5W09NF', '01HS0RHTWAVDXTPBV9VZ5W09NN', '01HS0RHTWAVDXTPBV9VZ5W09NY', '01HS0RHTWAVDXTPBV9VZ5W09P4', '01HS0RHTWAVDXTPBV9VZ5W09PE', '01HS0RHTWAVDXTPBV9VZ5W09PP', '01HS0RHTWAVDXTPBV9VZ5W09PZ', '01HS0RHTWAVDXTPBV9VZ5W09QA', '01HS0RHTWAVDXTPBV9VZ5W09QN', '01HS0RHTWBPNVM1R8Y8DM3F12Q', '01HS0RHTWBPNVM1R8Y8DM3F12Z', '01HS0RHTWBPNVM1R8Y8DM3F135', '01HS0RHTWBPNVM1R8Y8DM3F13C', '01HS0RHTWBPNVM1R8Y8DM3F13K', '01HS0RHTWBPNVM1R8Y8DM3F13S', '01HS0RHTWBPNVM1R8Y8DM3F13Z', '01HS0RHTWBPNVM1R8Y8DM3F14A', '01HS0RHTWBPNVM1R8Y8DM3F14N', '01HS0RHTWBPNVM1R8Y8DM3F14Y', '01HS0RHTWBPNVM1R8Y8DM3F159', '01HS0RHTWBPNVM1R8Y8DM3F15M', '01HS0RHTWBPNVM1R8Y8DM3F15T', '01HS0RHTWBPNVM1R8Y8DM3F165', '01HS0RHTWBPNVM1R8Y8DM3F16G', '01HS0RHTWBPNVM1R8Y8DM3F16V');

    а надо чтобы формировался вот так
    SELECT t0.id AS id_1, t0.product_id AS product_id_2 FROM image t0 WHERE t0.product_id IN (0x018E4188EB8ADB7BAB2F69DFCBC0268E, 0x018E4188EB8ADB7BAB2F69DFCBC02694, 0x018E4188EB8ADB7BAB2F69DFCBC0269B, 0x018E4188EB8ADB7BAB2F69DFCBC026A3, 0x018E4188EB8ADB7BAB2F69DFCBC026A9, 0x018E4188EB8ADB7BAB2F69DFCBC026AF, 0x018E4188EB8ADB7BAB2F69DFCBC026B5, 0x018E4188EB8ADB7BAB2F69DFCBC026BE, 0x018E4188EB8ADB7BAB2F69DFCBC026C4, 0x018E4188EB8ADB7BAB2F69DFCBC026CE, 0x018E4188EB8ADB7BAB2F69DFCBC026D6, 0x018E4188EB8ADB7BAB2F69DFCBC026DF, 0x018E4188EB8ADB7BAB2F69DFCBC026EA, 0x018E4188EB8ADB7BAB2F69DFCBC026F5, 0x018E4188EB8BB57740E11E4368378457, 0x018E4188EB8BB57740E11E436837845F, 0x018E4188EB8BB57740E11E4368378465, 0x018E4188EB8BB57740E11E436837846C, 0x018E4188EB8BB57740E11E4368378473, 0x018E4188EB8BB57740E11E4368378479, 0x018E4188EB8BB57740E11E436837847F, 0x018E4188EB8BB57740E11E436837848A, 0x018E4188EB8BB57740E11E4368378495, 0x018E4188EB8BB57740E11E436837849E, 0x018E4188EB8BB57740E11E43683784A9, 0x018E4188EB8BB57740E11E43683784B4, 0x018E4188EB8BB57740E11E43683784BA, 0x018E4188EB8BB57740E11E43683784C5, 0x018E4188EB8BB57740E11E43683784D0, 0x018E4188EB8BB57740E11E43683784DB);


    А все потому что видимо "по умолчанию" происходит так как я написал в ответ Виктор Кожухарь
    Написано
  • Взаимодействие между несколькими самостоятельными приложениями?

    @enigma2030 Автор вопроса
    Stalker_RED, спасибо за ответ.

    Это чистая теория, в плане а что если.

    При этом технически получилось реализовать используя bundle, но в нем нужно "дублировать" описание всех сущностей.

    Можно конечно это автоматизировать...

    На данный момент есть единая точка входа api с backend на symfony и несколько отдельных js frontend.

    Запросы вида api/client, api/billing etc сразу проксируются на соответствующее приложение.

    Внутренняя коммуникация между приложениями через REST API.
  • Взаимодействие между несколькими самостоятельными приложениями?

    @enigma2030 Автор вопроса
    Не должно у вас изменение сущности в одном приложении влиять на сущность в другом.


    Идентификатор Client должен "лечь" в Order

    Какая проблема, чтобы Client сходил в Order, получил идентификатор созданного заказа и дернул Billing?


    Проблемы как таковой нет, если к примеру использовать тот же REST API.
    Все работает.
    Накладные расходы только на задержку между запросами.

    Вопрос в том можно ли это решить описаным способом или тут только к примеру варианты с REST API и message queues к примеру.
  • Class Table Inheritance - Querying Inherited Classes по полям Inherited сущности?

    @enigma2030 Автор вопроса
    $qb->expr()->eq('ad.ad1_Foo', '?2') или $qb->expr()->eq('b.ad2_Bar', '?3') не работает, ошибка Class App\Entity\Ad has no field or association named ad1_Foo или ad2_Bar соответственно.

    Т.е не получается обратиться к полям дочерней таблицы чтобы по ним делать фильтрацию.
  • Class Table Inheritance - Querying Inherited Classes по полям Inherited сущности?

    @enigma2030 Автор вопроса
    Александр, У нас один общий метод в контроллере который выбирает все Ad вне зависимости от типа. Он прекрасно отрабатывает и даже если указать тип то фильтрует необходимые сущности.

    Тогда получается нам надо "подменять" репозиторий если явно указан тип для сущности, верно? С общим типом Ad фильтрацию по полю для конкретной сущности используя метод createQueryBuilder не получится реализовать?
  • Class Table Inheritance - Querying Inherited Classes по полям Inherited сущности?

    @enigma2030 Автор вопроса
    Это поможет нам ограничить выборку по кокретной дочерней таблице. А нам надо помимо этого еще и по полю этой самой дочерней таблицы.

    К примеру есть родительская таблица Ad
    И 3 дочерних Ad_1 Ad_2 Ad_3 где DiscriminatorColumn type = Ad_1 Ad_2 Ad_3 соответственно.

    С уникальными полями для каждой, к примеру
    Ad_1_field_1, Ad_2_field_2 и Ad_3_field_3

    Если будем делать
    $queryBuilder = $this->createQueryBuilder('ad');
    
    $queryBuilder->andWhere($queryBuilder->expr()->isInstanceOf('ad', Ad_1::class));
    или
    $queryBuilder->andWhere('ad INSTANCE OF :type')->setParameter('type', Ad_1::class);


    То получим только Ad_1 таблицу. И вот как тут дополнительно отфильтровать по значению поля Ad_1_field_1?

    Потому что ad.type.field_1 не доступно для выборки. Получаем ошибку вида Class App\Entity\Ad has no field or association named type.field_1.

    Поэтому я скорее всего где то не правильно что-то делаю.
  • Как оформить возврат на часть товаров из заказа?

    @enigma2030
    Как вариант можно сделать форму возврата с указанием товаров. После добавления результата формы, на основании входных данных удалять товары из отгрузки, создавать новую и переносить их туда. Так же добавить для доставки, к примеру "Возврат" и устанавливать его для второй отгрузки. И почтовое событие повесить на этот статус. Можно еще и для самого заказа статус "Возврат" добавить как писали ранее. Если он нужен для внутренних бизнес процессов.
  • Как изменить формат вывода url?

    @enigma2030 Автор вопроса
    sl0, Примерно к тому же выводу про js и пришел. Заказчик берет слова SEO специалиста за правду и ставит вопрос ребром "надо сделать так". Так что скорее всего придется использовать js "хак".
  • Как изменить формат вывода url?

    @enigma2030 Автор вопроса
    BoShurik, Я думаю вы правы и если рассматривать вопрос в разрезе работы браузера то при отправке обычной формы все "неизвестные" символы будут urlencoded. Как вариант просто перехватывать отправку формы, формировать "правильный" вид и делать отправку. Такой "хак" ради вида.
  • Как изменить формат вывода url?

    @enigma2030 Автор вопроса
    1. Так и сделали.
    2. Нужно чтобы после нажатия на "Apply" путь генерировался соответствующим образом.
  • Как изменить формат вывода url?

    @enigma2030 Автор вопроса
    BoShurik, Аргументы про то что функционал при этом работает корректно - не воспринимаются.
  • Как изменить формат вывода url?

    @enigma2030 Автор вопроса
    BoShurik, Заказчик хочет именно так, потому что некий SEO специалист считает что так надо.
  • Как правильно составить выборку?

    @enigma2030 Автор вопроса
    Дмитрий Энтелис, Спасибо. Нужны действительно хорошие кейсы, чтобы было развернутое понимание работы mysql. А то получается застрял на банальном.
  • Как правильно составить выборку?

    @enigma2030 Автор вопроса
    Дмитрий Энтелис Спасибо большое!

    Подскажите пожалуйста, насколько критично если я group by `offer_id` заменил на group by `property_id` и having count(`property_id`) = 2 на having count(`property_id`) = 2.
    Выборку проверил, вроде бы все нормально.

    P.S. Можете подсказать с какими материалами лучше ознакомиться, чтобы закрыть брешь в знаниях, как оказалось простой задачи) Надо было только применить group и having.
  • Могут ли print_r, echo и var_dump "убить" скрипт?

    @enigma2030 Автор вопроса
    Максим Тимофеев
    Ваш объект уже занимает память, плюс что-то еще занимает память, в какой-то момент ее не хватает. В Вашем случае при var_dump, но виноват не var_dump, а нехватка памяти. Решается ее увеличением, а лучше оптимизацией Вашего кода. К тому же Ваш объект может запросто иметь в себе бесконечный цикл.

    Код не мой, это коммерческая разработка и я использую то что поставляется в коробке.
    Скажу больше, проанализировав API, получается воссоздать такой же функционал в котором var_dump не "вешает" скрипт, только благодаря это удалось "заглянуть" в эту переменную чтобы работать с ее содержимым.
    От этого еще все запутанней, ТП говорит виноват var_dump, здесь почти все говорят что не он виноват, а именно объект. Но при попытке реализовать ту же логику своими силами все работает прекрасно)
    Но надо использовать все из "коробки" ибо совместимость, обновления и бла бла бла.
  • Могут ли print_r, echo и var_dump "убить" скрипт?

    @enigma2030 Автор вопроса
    Максим Тимофеев Странно получается) Техподдержка говорит, что именно данная конструкция виновна в падении. Ей якобы "не место" там, ибо без нее же все работает нормально. Т.е. работа с объектом в функции проходит нормально.
    Нехватка памяти происходит именно в момент использования var_dump. Получается якобы var_dump при попытке отобразить объект выедает всю память.
    ini_set('memory_limit', '64M');
    echo '<pre>';
    printf("Начало: %s \n", memory_get_usage());
    
    $data = [];
    for ($i = 0; $i < 100000; $i++) {
        $data[] = ['a', 'b', 'c'];
    }
    printf("До создание двух массивов: %s \n", memory_get_usage());
    $newData = array_merge($data, $data);
    printf("После создание двух массивов: %s \n", memory_get_usage());
    
    printf("До var_dump: %s \n", memory_get_usage());
    var_dump($newData);
    printf("После var_dump: %s \n", memory_get_usage());


    Начало: 1604648 
    До создание двух массивов: 45496216 
    После создание двух массивов: 55982072 
    До var_dump: 55982024 
    После var_dump: 56022992


    Не сказать что память прям изрядно потратилась именно на вывод. Если постепенно увеличивать количество итераций то скрипт "помрет", но именно разница в памяти до и после var_dump будет примерно одна и та же в процентном соотношении.
  • Могут ли print_r, echo и var_dump "убить" скрипт?

    @enigma2030 Автор вопроса
    Максим Тимофеев попробую перефразировать, я виню var_dump, но на деле виноват сам скрипт, верно?
  • Могут ли print_r, echo и var_dump "убить" скрипт?

    @enigma2030 Автор вопроса
    Максим Тимофеев В вашем примере у вас Василий будет выводится до окончания памяти. Потому что у вас конструкция функции такая, а у нас же немного иная ситуация. Есть функция в которую приходит всего один аргумент, это объект. И если внутри этой функции попытаться его var_dump то все, "приехали", а если нет то все работает нормально.
  • Могут ли print_r, echo и var_dump "убить" скрипт?

    @enigma2030 Автор вопроса
    Андрей Николаев Благодарю за ответ, теперь буду знать что при использовании var_dump с объектом большой вложенности может быть такой "сюрприз". В практике еще не встречалось такое поведение, поэтому и обескуражило, как без вывода все работает, а с выводом все "падает".
  • Могут ли print_r, echo и var_dump "убить" скрипт?

    @enigma2030 Автор вопроса
    Андрей Николаев А если рассматривать это не в рамках bitrix? Такое возможно с таким же огромным объектом?