私は以下のようなテーブル構造を持っています。item_id - > 1,2はメインメニュー項目です。item_id - > 3,4はparent_idで判断できるサブ項目ですphp yalinqo-iterate through result
私はこの結果をフェッチして繰り返します。 UI上でメニューを正しく構成することができます。
foreachループ 'foreach-1'を使用するまで、すべて正常に動作します。その結果は
1-BAGSです()... 2-ACCESSORIES()...
しかし、私は、foreachループを追加するときに 'foreachの-2'。その結果、私はyalinqoライブラリを使用しています、
1-BAGS(3,4、)...
そして、あなたが見ることができるように以下のように(2-アクセサリー)を示していません結果セットからデータをフェッチします。そして、wwwのyalinqoに関する助けは非常に少ないです。
問題を作成している隠しカーソルがありますか? yalinqoクエリの作成方法に問題がありますか?
あなたがyalinqoに取り組んでいれば、ここで手伝ってください。なぜなら、私はもっと.netユーザであり、PHPでの経験は非常に少ないからです。
私はここだけの部分コードを掲示しています:
use \YaLinqo\Enumerable as E;
...
if ($connection)
{
$result = mysqli_query($connection, "CALL fetch_main_menu") or die("Query fail: " . mysqli_error());
$result_data = E::from ($result) ;
$top_menu = E::from ($result_data)
->where (function($item){return $item["parent_id"]==null;})
->select (function ($item){return $item;});
//foreach - 1
foreach ($top_menu as $i)
{
$item_id = $i["id"];
$item_name = $i["name"];
echo $item_id . '-' . $item_name ;
//fetch subitems
$sub_menu = E::from ($result_data)
->where (function($item){global $item_id; return $item["parent_id"] != null && $item["parent_id"] == $item_id;})
->select (function ($item){return $item;});
echo '(';
//foreach - 2
foreach($sub_menu as $sub_i)
{
echo $sub_i["id"] . ',';
}
unset($sub_menu);
echo ') ... ';
}
}
P.Sは:私は、メニューバーの構築のために存在する場合の周りの別のより効率的な作業を使用させていただきます。
あなたはNoSQLのデータベースを使用することができますたとえば、mongoDBとデータベースのツリーを保存します。フィールドの親に配列を挿入するには、postgrySqlを使用します。または、グラフデータベースを使用します。あるいは、mysqlは素晴らしい5.7で、フォーマットjsonを使用します。より多くのことなどがありますが、1つのクエリですべてのデータと1つのインターレーターforeachを選択できます。 – Naumov