Доброго дня. ИМХО пытаюсь делать так, но судя по поведению скрипта этот способ неверный:
<?php
$prod_id = \Drupal::entityQuery('commerce_product')->condition('field_artikul', $artikul)->execute();
?>
В то время как получение id атрибута таким же способом у меня сработало:
<?php
$size_attr_id = \Drupal::entityQuery('commerce_product_attribute_value')
->condition('attribute', 'razmer_stelki')
->condition('name', $size)
->execute();
?>
Получил через запрос к БД:
<?php
$query = \Drupal::database()->select('commerce_product__field_artikul', 'с');
$query->addField('c', 'entity_id');
$query->condition('c.field_artikul_value', $artikul);
$pid = $query->execute()->fetchField();
?>
Но все таки хотелось узнать как это сделать через сущность. Догадываюсь, что в моем коде получаю какой-объект а не id.
Пользуясь случаем хотел еще спросить как отлаживать код? Например, надо посмотреть что пришло в переменную. print_r не работает. Попадался на глаза Devel, но пока не понял как им пользоваться.
Комментарии
Получайте вариации товара, а не товар.
Вообще-то должен, хоть это и не по феншую. Без devel можно ещё
<?php \Drupal::messenger()->addMessage(var_export($MY_VAR, TRUE)); ?>
<?php dpm($MY_VAR); ?>
в общем случае.Да у меня логика загрузки товаров из csv такова, что в каждой строке разная вариация и артикул, означающий товар, который может присутствовать в нескольких вариациях. И обрабатывая вариации я проверяю есть ли уже товар с этим артикулом и если он есть, надо загрузить сущность этого товара и добавить данную вариацию, а для того, чтобы это сделать надо знать id товара. Как то так))
За отладку спасибо)
Ещё раз пересмотрел ваш код. Кажется, проблема проще. Добавьте
reset()
.<?php
$prod_id = \Drupal::entityQuery('commerce_product')->condition('field_artikul', $artikul)->execute();
$prod_id = reset($prod_id);
?>
Не сработало. Все равно ошибка, в то время как с версией прямого обращения к таблице все ок. А что это за функция reset? Что-то не встречал ничего про нее.
Метод
::entityQuery()
возвращает множество (т.е. массив) идентификаторов. Вызов типаreset($result)
возвращает (помимо прочих действий) первое значение массива (в вашем случае оно же и единственное). В этой связи мне не совсем понятно, как работает ваш "удачный" второй пример.Самого червяк изнутри съедал что не так, в то время как должно работать. Проверил еще раз и о чудо - все ок!) Видимо где-то в первый раз ошибся. Спасибо!!