Создание динамической модели с помощью join CodeIgniter

#php #codeigniter #query-builder

#php #CodeIgniter #Конструктор запросов

Вопрос:

Я задал этот вопрос вчера, но он был удален, потому что администраторы сказали, что у него аналогичный вопрос с другим сообщением, но когда я проверяю его там, у меня нет такой же проблемы, поэтому я спрошу еще раз и надеюсь, что администратор сможет понять.

У меня есть эта модель в CodeIgniter:

 public function findJoinGroup($select,$where,$table,$join,$groupby)
{
    $this->db->select($select);
    $this->db->from($table);
    $this->db->join($join);
    $this->db->where($where);
    $this->db->group_by($groupby);
    return $this->db->get()->result_array();
}
 

У него есть параметр, который я могу использовать динамически (я имею в виду, что я могу использовать эту модель с другим значением в зависимости от контроллера) — верно? Поэтому, когда я использую контроллер, это будет так:

 $select = array(
            'ta.TR_APP_ID', 
            'ta.TR_SUB_DATE', 
            'ta.RB_ID', 
            'tr.RB_TOTAL', 
            'count(tdr.DET_RB_ID) as JUMLAH_ITEM', 
            'ME.EMP_FULL_NAME'
        );
$join = array(
            'tr_reimburse tr', 'tr.RB_ID = ta.RB_ID',
            'tr_detail_reimburse tdr', 'tdr.RB_ID = tr.RB_ID ',
            'm_employee me', 'tr.EMP_ID = me.EMP_ID',
        );
$where = array(
            'EMP_ID' => $empID,
            'TR_APP_STATUS ' => '0',
        );
$groupby = 'ta.TR_APP_ID';
$data['app'] = $this->Model_online->findJoinGroup($select,$where,'tr_approval ta',$join,$groupby);
 

Я могу установить значение select все, что я хочу, я могу установить значение where для всего, что я хочу, и т. Д

Но есть проблема: когда я устанавливаю значение join , оно не работает, как where и select .

Я получаю эту ошибку:

Было обнаружено неперехваченное исключение
типа: ArgumentCountError

Сообщение: слишком мало аргументов для функции CI_DB_query_builder::join(), 1 передано в C:laragonwwwonlineformapplicationmodelsModel_online.php в строке 71 и ожидается не менее 2

Имя файла: C:laragonwwwonlineformsystemdatabaseDB_query_builder.php

Номер строки: 526

Мой вопрос в том, как установить это значение массива, чтобы я мог использовать его в модели внутри переменной join

Таким образом, моя модель может использоваться для многих ситуаций, требующих объединения (одиночного или множественного объединения)

 $join = array(
            'tr_reimburse tr', 'tr.RB_ID = ta.RB_ID',
            'tr_detail_reimburse tdr', 'tdr.RB_ID = tr.RB_ID ',
            'm_employee me', 'tr.EMP_ID = me.EMP_ID',
        );
 

Я не хочу создавать такую модель, потому что это означает, что она может использоваться только 4 join, когда мне нужно соединение 3/2/1, я снова создаю модель.

 $this->db->select('*');

$this->db->from('table1');

$this->db->join('table2','table1.id=table2.id'); 

$this->db->join('table3','table2.id=table3.id');

$this->db->join('table4','table3.id=table4.id'); 

$this->db->join('table5','table5.id=table4.id');
 

Извините, я много объясняю, потому что я не могу найти решение этой проблемы, и я не хочу, чтобы администратор удалял мое сообщение без ответа: (

Пожалуйста, не удаляйте этого администратора, пусть люди помогут мне:’)

Ответ №1:

Используйте многомерный массив.Я думаю, это сработает для вас.

 $join = array(
        array('tr_reimburse tr', 'tr.RB_ID = ta.RB_ID'),
        array('tr_detail_reimburse tdr', 'tdr.RB_ID = tr.RB_ID'),
        array('m_employee me', 'tr.EMP_ID = me.EMP_ID'),
    );
 

и используйте это на стороне модели следующим образом.

 if(!empty($join)):
    foreach($join as $j):
      $this->db->join($j);
    endforeach;
endif;