если я хочу добавить JOIN в коллекцию, я не могу задать собственный алиас, покажу в коде
например я хочу добавить такой джоин с таблицей shop_product_stocks то алиас получится ps1, так как я внедряю его через хук productsCollectionPrepared или productsCollectionFilter то на этом этапе еще не заджойнилась таблица артикулов, которая получит такой же алиас и будет конфликт.. но вроде как есть возможность по хитрому через массив задать все нужные параметры джойна, но нет, там ошибка
ниже код такого джойна где все параметры передаются как массив
ниже на скрине видно код самой функции построения джойна, если таблица передана в виде массива, все хорошо строки 3068, где переменная $table перестает быть массивом и переопределяется просто строкой с именем таблица, но нам дальше нужен массив! чтоб дальше передать его в функцию получения алиаса, ниже покажу сам код функции алиаса
вот код получения алиаса.. тут так же проверяется если это массив то мы получаем алиса по ключу alias.. но мы его ни когда не получим а поэтому всегда перейдем к автоматическом получению его и первых букв таблиц
почему в параметр
$this->join_index
не попадает джоин я не знаю, так бы хотя бы цифра добавилась нужная если даже вручную алиас не получается задать
а как ты предлагаешь уже у созданного объекта коллекции что то изменить?? вот код к примеру обработчика хука products_collection.prepared
public function productsCollectionPrepared($collection){
$collection->addJoin([
'table'=>'shop_product_stocks',
'alias'=>'sps',
'on'=>'p.id=sps1.product_id',
'type'=>'LEFT',
]);
}
второй вариант решения тоже не подойдет, с вложенным массивом, на строчке 3081 попадет массив, в sql вместо имени таблицы будет array..
в моем случае нет возможности наследовать класс shopProductsCollection для переопределения метода addJoin и/или использовать там рефлексию с вызовом метода getAlias, так как объект уже создан.. так какие варианты без исправления ошибки кода разработчиками? и я вообще не понял этих умных комментов, вы наверно привыкли изворачиваться с вебасистом, а не сообщать об ошибках которые исправить меньше минуты
такое чувство что ты прикалываешься) с какого перепугу это должно работать??
во первых ошибка в названии класса, во вторых даже без ошибки это не будет работать...
$method->invoke($collection..... это просто вызовет метод и вернет "sps", но что толку от того что оно вернет его?? оно должно возвращать его внутри метода addJoin, а не нашем обработчике хука..
я думал проблема в том что таблица shop_product_skus подключается позже и с $this->join_index какая то ошибка, но нет.. там просто хардкодинг алиаса ps1
нет чтоб для для этой таблицы сделать нормальный уникальный алиас, разработчики хардкодят тот который генерится автоматом и не подумали о том что такой же алиас может быть и с другой таблицей
у меня же конкретно ошибка возникала из за этого
тупо если есть хоть один алиас PS в таблице индексов то добавляется такая выборка
9 комментариев
пятерка за анализ кода и тройбан за смекалку.
решение "хакерское":
решение "сын подруги":
я использую готовый объект коллекции в хуке products_collection.prepared.. тут не идет речь о переопределении методов
где ты нашел переопределение метода?
а как ты предлагаешь уже у созданного объекта коллекции что то изменить??
вот код к примеру обработчика хука products_collection.prepared
второй вариант решения тоже не подойдет, с вложенным массивом, на строчке 3081 попадет массив, в sql вместо имени таблицы будет array..
в моем случае нет возможности наследовать класс shopProductsCollection для переопределения метода addJoin и/или использовать там рефлексию с вызовом метода getAlias, так как объект уже создан.. так какие варианты без исправления ошибки кода разработчиками? и я вообще не понял этих умных комментов, вы наверно привыкли изворачиваться с вебасистом, а не сообщать об ошибках которые исправить меньше минуты
такое чувство что ты прикалываешься)
с какого перепугу это должно работать??
во первых ошибка в названии класса, во вторых даже без ошибки это не будет работать...
$method->invoke($collection..... это просто вызовет метод и вернет "sps", но что толку от того что оно вернет его?? оно должно возвращать его внутри метода addJoin, а не нашем обработчике хука..
заканчивай бро..
мой косяк, исправлюсь
не буду оспаривать твой код, главное что он работает и главное чтоб его приняли
я думал проблема в том что таблица shop_product_skus подключается позже и с $this->join_index какая то ошибка, но нет.. там просто хардкодинг алиаса ps1
нет чтоб для для этой таблицы сделать нормальный уникальный алиас, разработчики хардкодят тот который генерится автоматом и не подумали о том что такой же алиас может быть и с другой таблицей
у меня же конкретно ошибка возникала из за этого
тупо если есть хоть один алиас PS в таблице индексов то добавляется такая выборка