Mira, tengo 2 tablas tbl_office y tbl_result
| id | office_name | | id | office | rating | comment | |----|-------------| |----|-------------|-----------|---------| | 1 | Records | | 1 | Records | Satisfied | | | 2 | Logistics | | 2 | Logistics | Satisfied | | | 3 | HR | | 3 | HR | Neutral | |usé una etiqueta SELECCIONAR OPCIÓN en mi formulario para obtener el valor de fila de office_name de tbl_office
CONTROLADOR
namespace App\Controllers; use App\Models\SurveyModel; use App\Models\OfficeMOdel; 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 para mostrar los valores de office_name
<select name="office"> <?php foreach($office as $row) :?> <option><?php echo $row['office_name'] ?></option> <?php endforeach; ?> </select>FUNCIONA , pero cuando actualizo el valor de office_name de tbl_office , el valor de tbl_result no cambia. ¿Hay alguna manera de vincular esos valores en lugar de simplemente obtener el valor de la opción cuando lo inserto en la otra tabla?
Muchas gracias por responder. Principiante aquí.
No debe almacenar el nombre de la office en su tbl_result . En su lugar, debe almacenar 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) | +----+-----------+-----------+---------+unir dos tablas en el índice
$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);