1

DBからデータを取得してUIを動的に構築しようとしているときに、codeigniter、PHPを使用し始めたばかりで、問題に直面しています:

要件: DB から情報を読み取って、親 - 子のリストを動的に作成する必要があります。admin_menu と admin_menu_item の 2 つのテーブルがあります。管理メニューには親メニュー オプションが含まれ、admin_menu_item には各親の詳細オプションが含まれます。admin_menu_item には、親の ID を格納する AD_MENU_ID 列があり、階層構造が得られます。

私のコントローラー:

class Home extends CI_Controller {

public function index()
{
    $this->load->helper('url');
    $this->load->helper('array');
$this->load->model('Menu');
$header_data['base_url'] = base_url(); 
    $data['menu'] = $this->Menu->get_admin_menu_data();

    $data['menu_item'] = array();
foreach($data['menu'] as $row){
 array_push($data['menu_item'], 
     $this->Menu->get_admin_menu_item_data($row->ad_menu_id));
}
            $this->load->view('homepage/header');
    $this->load->view('homepage/admin_menu',$data);
}

}

これがコードの構造です

私のモデル:

class Menu extends CI_Model{

function __construct()
{
    // Call the Model constructor
    parent::__construct();
}

function get_admin_menu_data()
{
    $this->db->select('ad_menu_id,ad_menu_name');
    $query = $this->db->get('admin_menu');
    return $query->result();
}

function get_admin_menu_item_data($menu_id)
{
    $query = $this->db->query("SELECT ad_menu_item_name FROM ADMIN_MENU_ITEM WHERE AD_MENU_ID = " . $menu_id);

    if( $query->num_rows() > 0 ){
        return $query->result();
      }
}

}

ビューで $data 変数を使用すると、空の親行が表示され、親に値がない余分な項目が発生し、次のエラーが発生します

PHP エラーが発生しました重大度: 通知メッセージ: 非オブジェクトのプロパティを取得しようとしていますファイル名: ホームページ/admin_menu.php 行番号: 9

これは基本的に、親要素にアクセスするビューラインです

私の見解:

      echo "<ul class=\"accordion\" id=\"accordion-1\">";
        foreach ($menu as $key => $value) {
        print "<li class=\"dcjq-current-parent\">"; //add li tag
        print "<a href=\"#\">" . $value->ad_menu_name . "</a>\n";

        print "<ul>";                
        foreach($menu_item as $key_item => $value_item){
              print "<li><a href=\"#\">";
              print  $value_item->ad_menu_item_name . "</a></li>\n";
              $action_type = '';
        }//end of menu item for each
       print "</ul></li>\n";
      }//end of menu for each
        print "</ul>";

長い投稿で申し訳ありませんが、私は本当にここで立ち往生していて、これの何が問題なのかわかりませんか?

アップデート:

モデルとビューのコードを変更することで、ようやく機能させることができました。この問題は、オブジェクト内のオブジェクトが原因で、階層が複雑になりすぎていました。最終的な解決策は、データベース呼び出しを 1 回だけ行い、ビューでデータを処理することでした。私と協力して解決策を導いてくれた Yan に感謝します。

4

2 に答える 2

1

ビューの $menu 変数に 2 つの異なるオブジェクトがあるようですが、これはお勧めできません。私の提案は、そのうちの 1 つを 2 番目のパラメーターとしてビューに送信することです。

'$data['menu']['menu_item']'foreach ループの反復ごとにデータを上書きする方法に注意してください。

コントローラーで:

$data['menu_item'] = array();
foreach($data['menu'] as $row){
     array_push($data['menu_item'], 
         $this->Menu->get_admin_menu_item_data($row->ad_menu_id));
}

ビューで:

foreach ($menu_item as $key => $value) {
        print "<li class=\"dcjq-current-parent\">"; //add li tag
        print "<a href=\"#\">" . $value->ad_menu_name . "</a>\n";
}

EDIT:ソリューションはSQLクエリをマージしていました:

SELECT ADMIN_MENU_ITEM 
.ad_menu_item_name FROM ADMIN_MENU_ITEM JOIN admin_menu ON ADMIN_MENU_ITEM.AD_MENU_ID = admin_menu.ad_menu_id
于 2012-04-29T16:32:04.930 に答える