#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;