CODEIGNITER4: как связать значение из table_1 в table_2, которое я вставляю с помощью тега ВЫБОРА ОПЦИИ

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

Поделиться скрипкой SQL

  ==== =========== =========== ========= 
| 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. Вы можете принять полезный ответ