Magento запрашивает клиентов по значению опции eav - PullRequest
0 голосов
/ 09 мая 2018

Мы создали пользовательские атрибуты клиента для даты рождения:

dob_month, dob_day

Это входной тип внешнего интерфейса select и внутренний тип int. Мы пытаемся получить от клиентов следующие поля: entity_id, dob и store_id (если возможно, одно поле dob, в противном случае разделенное на dob_month и dob_day).

Вот где мы боремся, мы хотели бы отфильтровать по этим значениям опций. Пример: dob_month = 05 и dob_day = 08

Все, что мы пробовали, мы либо должны фильтровать по значению, сохраненному в customer_entity_int, например: 1125 = eav_option_value из 05, либо мы можем извлечь только значение, сохраненное в customer_entity_int.

Я полагаю, что должен быть способ. Буду очень признателен за любую помощь.

Вот самое близкое, что я получил:

$collection = Mage::getResourceModel('customer/customer_collection')
                ->addAttributeToSelect('email')
                ->addAttributeToSelect('dob_month', 'left')
                ->addAttributeToSelect('dob_day', 'left')
                ->addExpressionAttributeToSelect('dob', "CONCAT({{dob_month}}, '-',{{dob_day}})", array(
                'dob_month', 'dob_day'
                ))
->addAttributeToFilter('dob_month', array(
    array('eq' => '1125')
))
/*->addAttributeToFilter('dob_day', array(
    array('eq' => '08')
))*/
->setPageSize(20)
->setCurPage(1);

Примечание. PageSize и CurPage предназначены только для тестирования, чтобы ограничить результаты.

1 Ответ

0 голосов
/ 16 мая 2018

Если кто-то захочет, лучшее, что я получил, это сделать все это с помощью SQL:

SELECT e.entity_id,CONCAT(dob_month_eav.value, '-',dob_day.dob_day) as dob,e.store_id FROM customer_entity AS e
LEFT JOIN customer_entity_int AS cv 
ON ( cv.attribute_id = (
    SELECT attribute_id FROM eav_attribute 
    WHERE entity_type_id = e.entity_type_id 
    AND attribute_code = 'dob_month'
    )
AND cv.entity_id = e.entity_id)
LEFT JOIN `eav_attribute_option_value` as `dob_month_eav` ON dob_month_eav.option_id=cv.value 
LEFT JOIN (SELECT e.entity_id,dob_day_eav.value as dob_day,e.store_id FROM customer_entity AS e
LEFT JOIN customer_entity_int AS cv 
ON ( cv.attribute_id = (
    SELECT attribute_id FROM eav_attribute 
    WHERE entity_type_id = e.entity_type_id 
    AND attribute_code = 'dob_day'
    )
AND cv.entity_id = e.entity_id)
LEFT JOIN `eav_attribute_option_value` as `dob_day_eav` ON dob_day_eav.option_id=cv.value) as dob_day ON dob_day.entity_id=e.entity_id
WHERE dob_month_eav.store_id=0 AND dob_month_eav.value='05' AND dob_day='08'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...