Работа с массивами в Kohana, пустая страница? - PullRequest
0 голосов
/ 06 марта 2011

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, указывающую на то, что ключ не существует (да, я его создаю), но по большей части вывод - белый.

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

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


Четкость редактирования:

Мои ошибки в стороне, проблема заключается в создании вторичного массива, например:

<code>    $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 "
";

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

Спасибо

Ответы [ 2 ]

0 голосов
/ 06 марта 2011

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

0 голосов
/ 06 марта 2011

Ваш код должен выглядеть следующим образом: -

$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",

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

...