2015-07-03 3 views
0

Я хочу оптимизировать скорость моего веб-сайта и получить все данные, включая данные реляционных (выбрать) полей в одном запросе. Как это сделать?Как получить данные реляционных полей в одном запросе

Ниже мои выводы до сих пор:

я заметил, что при выполнении $pod->field('relational_field'); дополнительный запрос будет работать.

Предполагая, стручок с полем имя и поле в категории которое реляционная (выбрать):

// This code below will behave unexpected 
$pod = pods('pod', array(
    'where' => array(...), 
    'select' => array('t.name', 'category.name AS category_name') 
)); 

Предполагая, что вы создали один отдельный элемент Pod связан с двумя категориями , вы получите два результата:, из-за категории.name AS category_name в опции выбора. Если у вас есть одна категория, назначенная на pod, вы получите один результат.

Результат выглядит следующим образом:

array (size=2) 
    0 => 
    object(stdClass)[2928] 
     public 'name' => string 'My pod 1' (length=8) 
     public 'category' => string 'Category 1' (length=10) 
    1 => 
    object(stdClass)[2929] 
     public 'name' => string 'My pod 1' (length=8) 
     public 'category' => string 'Category 2' (length=10) // <-- The difference is only in category 

То, что я действительно хочу это данные двух категорий в этом ключе «категории», как массив. Это возможно?

(первоначально размещен на Pods.io)

+0

Существует подробный пример того, как здесь использовать параметры SELECT в точках Pods: https://github.com/pods-framework/pods-code-library/blob/master/example/classes/Pods/find/examples /multi-relationship-optimization.php – JPollock

+0

Привет @JPollock, спасибо, но это именно то, что я делаю, я получаю неожиданный результат, как вы видите. Это ошибка? Тогда я открою вопрос о Github, если вы захотите. – DelphiLynx

+0

Да, пожалуйста, откройте проблему. Если это ошибка, то она принадлежит GitHub не SO. Лучшим местом BTW для получения поддержки Pods является Pods Slack. Pods.io/chat – JPollock

ответ

1

Это близко. Параметр 'select' должен быть строкой, так как вы будете поставлять предложение SQL SELECT, а не массив полей. То же самое с параметром «где», так:

$pod = pods('pod', array(
    'where' => 'where params as a string', 
    'select' => 't.name,category.name AS category_name') 
)); 

При получении данных с field() или display() воспользоваться псевдонимом «category_name» вместо точечной нотации.