Работа с массивами в Kohana, пустая страница?

tl; dr - Нажатие на массив (по $ array [] или $ array [$ id] не работает в Kohana 3, это дает пустую белую страницу.

Я использую Kohana (3), это мой первый опыт работы с MVC, и пока все отлично; однако я работаю с базой данных и столкнулся со странной проблемой, на которую я надеялся, что кто-то сможет пролить свет:

Мой рабочий процесс выглядит следующим образом, чтобы дать вам представление о моих проблемах, связанных с:

$sql = "SELECT table1.row1, max(table2.row1) as `maxAwesome` FROM table1, table2 WHERE table1.id=table2.table1id GROUP BY table1.id";
$table1Results = DB::query(Database::SELECT, $sql)->execute();
$masterArray = array();
foreach ($table1Results as $result1)
{
     $sql = "SELECT * FROM table2 WHERE table2id='"  . $result1['id'] . "' AND column > 21";
     $table2Results = DB::query(Database::SELECT, $sql)->execute();
     $subArray = array();
     foreach ($table2Results as $result2)
     {
         $subArray[$result1['id']] = $result2;
         // Even had just $subArray[] = array("whatever");
     }
     $masterArray[] = array("table1Data" => array(), "table2Data"=> $subArray);
}

Я делаю запрос, в котором я запускаю пару функций max / min, а затем выполняю запрос в foreach, выполняя еще один выбор для создания основного массива данных, отформатированных так, как я хочу, и весь SQL и т. Д. Работает нормально и денди; однако проблема возникает, когда я нажимаю на массив.

Кажется, всякий раз, когда я нажимаю на массив, выполняя либо $ array [] = array ("data"); или указав ключ $ array [$ id] = array ("data"); Kohana дает мне прямую пустую страницу, без ошибок, без вывода и т. Д.

Иногда я получаю ошибку Kohana, указывающую на то, что ключ не существует (да, я его создаю), но по большей части вывод белый.

Почему это происходит? Я ошибаюсь?

Заранее спасибо.


Ясность править:

Если не считать моих грубых ошибок в SQL, проблема заключается в построении вторичного массива, например:

    $queryStores = "SELECT stores.store_id, stores.title, max(product.discount) as `max_discount`, min(product.discount) as `min_discount`
                    FROM stores, products
                    WHERE products.store=stores.store_id
                    GROUP BY products.store";

    $stores = DB::Query(Database::SELECT, $queryStores)->execute();
    $formattedStores = array();
    if (count($stores))
    {
        foreach ($stores as $store)
        {
            $formattedStores[$store['store_id']] = array(
                "title" => $store['title'],
            );
            // Same result if just doing $formattedStores[] = array();
            // Problem goes away should I do:
            // $formattedStores = array("This works");
            //
        }
    }

    echo "<pre>";
    print_r($formattedStores);
    echo "</pre>";

При этом не печатается массив, а просто отображается пустая страница; однако, если я изменю его, просто переустановив массив $ formattedStores на что-то, я получу результат. Что такого в том, что толкает массив, что вызывает проблему, возможно, ошибку Kohana?

Спасибо


person Jeff Andersen    schedule 05.03.2011    source источник


Ответы (2)


Ваш код должен быть таким: -

$sql = "SELECT table1.id, table1.row1, max(table2.row1) as `maxAwesome`
        FROM table1, table2
        WHERE table1.id = table2.table1id
        GROUP BY table1.id";
$table1Results = DB::query(Database::SELECT, $sql)->execute();
$masterArray = array();

if (count($table1Results))
{
    foreach ($table1Results as $result1)
    {
        $sqlInner = "SELECT * FROM table2
                     WHERE table2id = '" . $result1['id'] . "'
                       AND column > 21";
        $table2Results = DB::query(Database::SELECT, $sqlInner)->execute();
        $subArray = array();

        if (count($table2Results))
        {
            foreach ($table2Results as $result2)
            {
                $subArray[$result1['id']] = $result2;
                // Even had just $subArray[] = array("whatever");
            }
        }

        $masterArray[] = array("table1Data" => array(), "table2Data"=> $subArray);
    }
}

Некоторые ценные стандарты кодирования и ошибки: -

  • У вас есть поле "id" (относительно таблицы БД "table1"), отсутствующее в первом SQL.
  • Второй SQL должен быть лучше написан с использованием другого именования переменных, чтобы отделить его от первого. Следовательно, вторая переменная называется «$sqlInner».
  • Всегда лучше проверять наличие каких-либо элементов массива в переменной массива, поэтому я использовал простые проверки с помощью оператора «if».

Надеюсь, поможет.

person Knowledge Craving    schedule 06.03.2011
comment
Мой SQL ошибается, даже если я выполняю простой единственный запрос и пытаюсь заполнить массив с помощью $ array [] = stuff; Кажется, у меня пустой белый вывод и никаких ошибок. Я собираюсь отредактировать приведенное выше, добавив более понятный SQL / Setup, чтобы проиллюстрировать мою проблему. Спасибо. - person Jeff Andersen; 06.03.2011

Я определил, что это связано с памятью.

person Jeff Andersen    schedule 06.03.2011
comment
Если это ответ, отметьте как выбранное, иначе он будет продолжать отображаться как неотвеченный. - person random; 31.03.2011