#javascript #php #mysql #codeigniter-4
Вопрос:
Видите ли, у меня есть 2 таблицы tbl_office и tbl_result
| id | office_name | | id | office | rating | comment |
|----|-------------| |----|-------------|-----------|---------|
| 1 | Records | | 1 | Records | Satisfied | |
| 2 | Logistics | | 2 | Logistics | Satisfied | |
| 3 | HR | | 3 | HR | Neutral | |
я использовал тег ВЫБОРА ОПЦИИ в своей форме, чтобы получить значение строки office_name из tbl_office
контроллер
namespace AppControllers;
use AppModelsSurveyModel;
use AppModelsOfficeMOdel;
class Survey extends BaseController
{
public function index()
{
$data = [];
helper(['form','url']);
$office = new OfficeMOdel();
$data['office'] = $office->findAll();
if($this->request->getMethod() == 'post'){
$rules = [
'office' => ['label' => 'Office', 'rules' => 'required'],
'rating' => ['label' => 'Rating', 'rules' => 'required']
];
if (!$this->validate($rules)){
$data['validation'] = $this->validator;
}else{
$model = new SurveyModel();
$newData = [
'office' => $this->request->getVar('office'),
'rating' => $this->request->getVar('rating'),
'comment' => $this->request->getVar('comment'),
];
$model->save($newData);
$session = session();
$session->setFlashdata('success','Your Feedback has been successfully added to our system!',);
return redirect()->to('survey/confirmation');
}
}
echo view ('templates/header_form', $data);
echo view ('surveyform');
echo view ('templates/footer_form');
}
PHP/HTML для отображения значений имени офиса
<select name="office">
<?php foreach($office as $row) :?>
<option><?php echo $row['office_name'] ?></option>
<?php endforeach; ?>
</select>
ЭТО РАБОТАЕТ, но когда я обновляю значение из office_name из tbl_office, значение в tbl_result не меняется. Есть ли способ связать эти значения вместо того, чтобы просто получать значение параметра, когда я вставляю его в другую таблицу?
Большое вам спасибо за ответ. Новичок здесь.
Ответ №1:
соедините две таблицы в индексе
$result = $this->model->select('request_post.*')
->join('users', 'request_reply.user_id = users.id', 'left')
->join('request_post', 'request_reply.post_id = request_post.id', 'left')
->where(['request_post.id'=>['1']])
->paginate(10, 'default',1, 0);
Ответ №2:
Вы должны кивнуть office
на название магазина в своем tbl_result
. Вместо этого вы должны хранить office_id:
CREATE TABLE `tbl_office` (
id int primary key auto_increment,
name varchar(64)
);
CREATE TABLE `tbl_rating` (
id int primary key auto_increment,
name varchar(64)
);
CREATE TABLE `tbl_result` (
id int primary key auto_increment,
office_id int,
rating_id int,
comment text
);
SELECT `res`.`id`, `o`.`name` AS `office`, `r`.`name` AS `rating`, `comment`
FROM `tbl_result` `res`
JOIN `tbl_office` `o` ON `o`.`id` = `res`.`office_id`
JOIN `tbl_rating` `r` ON `r`.`id` = `res`.`rating_id`
==== =========== =========== =========
| id | office | rating | comment |
==== =========== =========== =========
| 1 | Records | Satisfied | (null) |
---- ----------- ----------- ---------
| 2 | Logistics | Satisfied | (null) |
---- ----------- ----------- ---------
| 3 | HR | Neutral | (null) |
---- ----------- ----------- ---------
Комментарии:
1. вместо того, чтобы получать » имя » из tbl_office , я должен вставить идентификатор в tbl_result , чтобы каждый раз, когда данные изменяются из таблицы, он получал имя значения из строки идентификатора , верно?
2. Точно! Используя JOIN, вы получите фактическое имя
3. Огромное спасибо. Я кое-чему научился. Я постараюсь применить его.
4. Вы можете принять полезный ответ