CakePHP로 Select2를 계층형의 셀렉트 박스로 실현하는 방법【계층형】

6802 단어 PHPCakePHP선택2

데이터베이스 구성



■ 테이블 구성 (places 테이블)


컬럼
금형


id
INT

parent_id
INT

이름
VARCHAR


■테이블의 내용


id
parent_id
이름


1
NULL
관동

2
1
도쿄도

3
1
사이타마현

4
1
도치기현

5
NULL
간사이

6
5
오사카부

7
5
교토부

8
5
효고현


"parent_id가 null이 부모", [parent_id가 null이 아닌 것이 아이"입니다.
  • 간토
  • 도쿄도
  • 사이타마 현
  • 도치기현

  • 간사이
  • 오사카 부
  • 교토 부
  • 효고현


  • 컨트롤러로 places 테이블에서 원하는 형태로 취득



    아래와 같은 형태로 $optinos에 배열을 정의하고 싶습니다.

    PostsController.php
    
    $optinos = [
        '関東' => [
            2 => '東京都',
            3 => '埼玉県',
            4 => '栃木県',
        ],
        '関西' => [
            6 => '大阪府',
            7 => '京都府',
            8 => '兵庫県',
        ]
    ];
    
    
    

    Collection 클래스를 사용하여 데이터를 검색합니다.

    PostsController.php
    
    $parents = $this->Places->find()
        ->where([
            ['Places.parent_id is' => null]
        ]);
    
    $places = $this->Places->find()
        ->join([
            'table' => $parents,
            'alias' => 'Parent',
            'type' => 'LEFT',
            'conditions' => 'Parent.Places__id = Places.parent_id'
        ])
        ->where([
                ['Places.parent_id is not' => null]
        ])
        ->select([
            'Places.id',
            'Places.parent_id',
            'Places.name',
            'Parent_name' => 'Parent.Places__name',
        ]);
    
    $places = Collection($places);
    $options = $places->combine('id', 'name', 'Parent_name')->toArray();
    
    $this->set(compact('options'));
    
    

    보기로 전달



    컨트롤러에서 얻은 $options를 선택 상자의 인수에 전달합니다.

    add.ctp
    
    $this->Form->select('id', $options, ['id' => 'select2'])
    
    <script>
      $(document).ready(function() {
        $('#select2').select2();
      });
    </script>
    

    그러면 아래와 같이 됩니다.



    참고



    Select2 공식 사이트
    CakePHP 공식 사이트

    좋은 웹페이지 즐겨찾기