Передать параметр модели в кодингитере - PullRequest
0 голосов
/ 10 мая 2018

В настоящее время в моей модели я жестко программирую в 'XYZ'. Это работает, потому что я получаю правильное количество зданий XYZ, но есть еще 50 зданий, которые тоже нужны. Для меня нет смысла жестко кодировать все здания.

Как передать это здание в качестве параметра.

Мой файл просмотра выглядит так:

<div class="col-md-4 col-sm-4 col-xs-12">
  <div class="x_panel tile">
    <div class="x_title">
      <h2>Buildings</h2>
      <div class="clearfix"></div>
    </div>
    <div class="x_content">
      <h4>Total work requests</h4>
      <?php foreach ($buildings as $bldg){?>
        <div class="widget_summary">
          <div class="w_left w_25">
            <span><?php echo $bldg['Building_Code'];?></span>
          </div>
          <div class="w_center w_55">
            <div class="progress">
              <div class="progress-bar bg-green" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 66%;">
                <span class="sr-only">60% Complete</span>
              </div>
            </div>
          </div>
          <div class="w_right w_20">
            <span><?php echo $countBuildings; ?>
            </span>
          </div>
          <div class="clearfix"></div>
        </div>
      <?php } ?>
    </div>
  </div>
</div>

Мой контроллер выглядит так:

$data["countBuildings"]= $this->Buildings_model->getBldgCount('XYZ');
$this->load->view('main/header');
$this->load->view('main/body', $data);
$this->load->view('main/footer');

Моя модель выглядит так:

public function getBldgCount($queryBuilding){
  $this->db->select('*');
  $this->db->where('Building_Code', $queryBuilding);
  $this->db->from('work_requests');
  $count = $this->db->count_all_results();
  return $count;
}

Ответы [ 4 ]

0 голосов
/ 11 мая 2018

В вашем контроллере вы должны установить значение массива в $data числа зданий.

В контроллере заменить:

$data["countBuildings"]= $this->Buildings_model->getBldgCount('XYZ');
$this->load->view('main/header');
$this->load->view('main/body', $data);
$this->load->view('main/footer');

С:

foreach($data['buildings'] as $k=>$v){
    $data["buildingcount"][$k]["count"] = $this->Buildings_model->getBldgCount($v);
}

$this->load->view('main/header');
$this->load->view('main/body', $data);
$this->load->view('main/footer');

При необходимости необходимо обновить код вида, чтобы учесть данные о новых зданиях.

Обновлен вид:

<div class="col-md-4 col-sm-4 col-xs-12">
  <div class="x_panel tile">
    <div class="x_title">
      <h2>Buildings</h2>
      <div class="clearfix"></div>
    </div>
    <div class="x_content">
      <h4>Total work requests</h4>
      <?php foreach ($buildings as $bk=>$bldg){?>
        <div class="widget_summary">
          <div class="w_left w_25">
            <span><?php echo $bldg['Building_Code'];?></span>
          </div>
          <div class="w_center w_55">
            <div class="progress">
              <div class="progress-bar bg-green" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 66%;">
                <span class="sr-only">60% Complete</span>
              </div>
            </div>
          </div>
          <div class="w_right w_20">
            <span><?php echo $buildingcount[$bk]['count']; ?>
            </span>
          </div>
          <div class="clearfix"></div>
        </div>
      <?php } ?>
    </div>
  </div>
</div>
0 голосов
/ 10 мая 2018

Вам нужно изменить подход. Нет необходимости жестко кодировать строительный кодекс. Вам даже не нужно передавать строительный кодекс.

Вам нужно использовать group by в вашем запросе, чтобы он возвращал все здание с количеством.

public function getBldgCount(){
    $this->db->select('Building_Code, COUNT(id) as total');
    $this->db->group_by('Building_Code');
    $this->db->get('work_requests');
}
0 голосов
/ 11 мая 2018

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

лучший подход - использовать пользовательский помощник, потому что вам нужно сосчитать все 50 типов зданий

Создайте помощника с именем custom_helper.php и поместите его в папку helpers и автоматически загрузите с autoload.php

$autoload['helper'] = array('custom');

custom_helper.php должно быть так:

function count_building_by_code($building_code)
{
    $ci = & get_instance();
    /* Omit this line if you autoload model in autoload.php*/
    $ci->load->model('Buildings_model');
    $count = $ci->Buildings_model->getBldgCount($building_code);
    return $count;
} 

Код модели:

public function getBldgCount($building_code)
    {
        if ($building_code)
        {
            $this->db->where('Building_Code',$building_code);
            return $this->db->count_all_results('work_requests');
        }
    }

Вид:

<?php foreach ($buildings as $bldg){?>
        <div class="widget_summary">
          <div class="w_left w_25">
            <span><?php echo $bldg['Building_Code'];?></span>
          </div>
          <div class="w_center w_55">
            <div class="progress">
              <div class="progress-bar bg-green" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 66%;">
                <span class="sr-only">60% Complete</span>
              </div>
            </div>
          </div>
          <div class="w_right w_20">
            <span><?php echo count_building_by_code($bldg['Building_Code']); ?>
            </span>
          </div>
          <div class="clearfix"></div>
        </div>
      <?php } ?>

Для более: https://www.codeigniter.com/user_guide/general/helpers.html

0 голосов
/ 10 мая 2018

Вам нужно изменить подход.Нет необходимости жестко кодировать строительный кодекс.Вам даже не нужно передавать строительный код.

Вам нужно использовать group by в вашем запросе так, чтобы он возвращал все здание с count.Ваша модель будет выглядеть примерно так:

public function getBldgCount(){
    $this->db->select('Building_Code, COUNT(id) as total');
    $this->db->group_by('Building_Code');
    $this->db->get('work_requests');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...