开发者

Working with arrays in Kohana, Blank page?

tl;dr - Pushing an array (by $array[] or $array[$id] is not working in Kohana 3, it gives a blank white page.

I'm using Kohana (3), it's my first experience with MVC and it's been great so far; however, I'm working with a database and encountered a weird problem that I was hoping someone could shed some light on:

My workflow is like this, to give you an idea of my problems surrounding:

$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);
}

I do a query where I run a couple max/min functions then do a query within the foreach doing another select to build a master array of data formatted the way I want it and all the SQL etc works fine and dandy; however, the problem arises when I'm pushing the array.

It seems whenever I push the array by doing either $array[] = array("data"); or by specifying the key $array[$id] = array("data"); Kohana gives me a straight blank page, no error, no output etc.

Sometimes I get a Kohana error indicating the key does not exist (duh, I'm creating it) but for the most part the output is straight white.

Why is this happening? Am I going about it wrong?

Thanks in advance.


Clarity edit:

My SQL blunders aside, the issue lies in the building of the secondary array, for example:

    $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_i开发者_开发问答d
                    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>";

That does not print an array, it simply gives a blank page; however, if i change it to just re-set the $formattedStores array to something I get an output. What is it about pushing the array that's causing a problem, perhaps a Kohana bug?

Thanks


Your code should be like:-

$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);
    }
}

Some valuable coding standards & miss-ups:-

  • You have got the "id" field (w.r.t. the "table1" DB table) missing from the first SQL.
  • The second SQL should be better written using another variable naming, so as to keep it separate from the first one. Hence the second variable is named as "$sqlInner".
  • It's always better to check for any existence of array elements in an array variable, so I have used the simple checks using the "if" statement.

Hope it helps.


I've determined this to be memory related.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜