Что является наиболее эффективным способом управления многоуровневыми отношениями с помощью WordPress Pods CMS - PullRequest
2 голосов
/ 24 января 2011

Я впервые использую стручки в Wordpress, так что простите, если на этот вопрос легко ответить. Я немного искал ответ на эту проблему, но не нашел ничего, что конкретно отвечало бы на мой вопрос.

У меня есть два разных типа стручков.

  1. Области обучения: такие как физика, социология или вычислительная техника
  2. Тематические исследования: подробная информация о тематических исследованиях, проведенных в различных областях исследования

Каждый блок изучения конкретного случая имеет поле отношения, связывающее его с конкретным участком исследования. (В этом примере предположим, что конкретное тематическое исследование может быть связано только с одной областью исследования. Это может измениться в будущем, но на данный момент этого должно быть достаточно.)

Каждая область исследования имеет поле отношений, связывающее ее с определенной страницей WP (например, подробная страница, которая описывает детали для области изучения физики).

Что я хочу сделать, так это проходить по разным тематическим исследованиям, чтобы иметь возможность получить ссылку на страницу WP, с которой связана ее конкретная область.

Технически я знаю, КАК это сделать, но я не уверен, что это самый эффективный способ сделать это. Это то, что я сделал, и, кажется, работает:

<?php 
$case_studies = new Pod('case_studies');
$case_studies->findRecords(null, 200);
$total_rows = $case_studies->getTotalRows();

if ($total_rows > 0) {
        while ($case_studies->fetchRecord()) {
                // RETRIEVE AREA OF FOCUS DETAILS
                $aof = $case_studies->get_field('area_of_focus');
                $aof = $aof[0];

                // GET AREA OF FOCUS POD
                $aofs = new Pod('areas_of_focus');
                $params = array('where' => "t.id like '".intval($aof['id'])."'");
                $aofs->findRecords($params);
                if ($aofs->fetchRecord()) {
                        $page = $aofs->get_field('focus_page');
                        $area_of_focus_url = get_permalink($page[0]['ID']);
                        echo '<a href="'.$area_of_focus_url.'">'. $aof['name'].'</a>';
                } else {
                        echo $aof['name'];
                }

                // CASE STUDY DETAILS GO HERE
        }
}

?>

Кажется, что это как минимум алгоритм O (n²), если не больше. Я действительно не знаю внутренностей класса Pod, так что это может быть даже дороже, чем это. Также это будет выполнять несколько запросов MySQL вместо одного запроса.

Было бы лучше, если бы я использовал несколько соединений MySQL в первоначальном запросе кейса, чтобы мне не пришлось запускать кучу других запросов? Или есть какие-либо другие функции внутри самого Pods, которые могут позволить мне получить более подробную информацию о полях отношений?

Любые советы будут с благодарностью.

1 Ответ

1 голос
/ 24 декабря 2011

Вы можете действительно углубиться в get_field, пересекая отношения.

Попробуйте это для размера:

$page_ID = $case_studies->get_field('area_of_focus.focus_page.ID');

Стручки сделают всю работу за вас, вы можете потратить массууровней, и вы можете сделать то же самое с findRecords (с Pod 1.12)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...