Можно ли сопоставить сериализованные массивы в БД с сериализованными массивами с помощью meta_query?

Скажем, у меня есть массив флажков, связанных с постом (настраиваемым полем), хранящимся в базе данных в сериализованной форме. На моем сайте я предоставляю пользователям одинаковые флажки и позволяю им самим фильтровать записи в соответствии с их выбором. Если хотя бы один из их вариантов совпадает с выбором постов, этот пост должен отображаться.

$args['meta_query'] = array(
  array(
    'key' => 'choices',
    'value' => $_POST['choices'],
    'compare' => 'IN',
));

Поскольку данные в БД находятся в сериализованной форме, я надеялся, что WP_Query будет достаточно умен, чтобы понять, что ему необходимо десериализовать сериализованные данные в БД перед попыткой сопоставления. Этого не произошло, и я подумываю о том, чтобы отправить его в WP Trac и посмотреть, можно ли добавить его в качестве функции в будущих выпусках.

Мой вопрос заключается в том, есть ли у меня здесь какие-либо варианты, кроме как для хранения моих данных другим способом (что на данный момент кажется сложным, так как я использую плагин Advanced Custom Fields для его хранения). Я просмотрел meta_query с мета-значениями как сериализованные массивы, и ответы там указали мне на то, чтобы хранить мои данные другим способом. Я надеюсь, что смогу избежать этого.

Понравился вопрос? Нужен ответ? Поддержите проект
WPAsk
Ответов: 1
  1. Milo

    Проблема в том, что SQL выполняет запросы, но только PHP понимает сериализацию. Вам нужно будет выбрать, а затем десериализировать КАЖДОЕ метаполе с соответствующим ключом и проверить его на соответствие. Не храните их сериализованными.

Добавить ответ

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: