如何使用 CodeIgniter 3 中的外键从 table 中获取列数据
How to fetch columns data from a table using the foreign key in CodeIgniter 3
您好,首先我要告诉您,英语不是我的第一语言,所以请原谅任何误解。我在这里尝试的是使用“数据包”table 中的外键访问“捐助者”table 数据,我需要在控制器中获取该数据才能使用。在我看来,我指的是 PacketID
,在 staff
控制器中,我需要获取特定的 DonorMobile
和 DonorName
才能向该捐赠者发送短信。我尝试创建多个模型函数但没有成功。是不是可以通过这种方式实现,或者有没有其他方式? TIA!
donors
和 packets
tables
的屏幕截图
donors table 和
packets table
员工控制器 - 我知道您无法在控制器中访问 $donorData->DonorID
等数据
public function markAsUsed($packet)
{
$this->load->Model('Donor_Model');
$donorData = $this->Donor_Model->getDonors($packet);
$this->load->Model('Donor_Model');
$data = $this->Donor_Model->markAsUsed($donorData->DonorID);
$sid = 'twilio sid';
$token = 'twilio token';
$donorMobile = '+94' . $donorData->DonorMobile;
$twilioNumber = 'twilio number';
$client = new Twilio\Rest\Client($sid, $token);
$message = $client->messages->create(
$donorMobile, array(
'from' => $twilioNumber,
'body' => 'Thank you ' . $donorData->DonorName . ' for your blood donation. Your donation has just saved a life.'
)
);
if ($message->sid) {
$this->load->Model('Donor_Model');
$this->Donor_Model->changeStatus($data->isAvailable);
redirect('staff/viewpackets');
}
}
型号
function getDonors($packet) {
$data = $this->db->get_where('packets', array('PacketID' => $packet));
return $data->row();
}
function markAsUsed($donor)
{
$data = $this->db->get_where('donors', array('DonorID' => $donor));
return $data->row();
}
function changeStatus($packet)
{
$data = array(
'isAvailable' => False,
);
return $this->db->update('packets', $data, ['PacketID' => $packet]);
}
找到答案了!您只能使用控制器来执行此操作。
$packetData = $this->db->get_where('packets', array('PacketID' => $packet));
foreach ($packetData->result() as $row) {
$donorID = $row->DonorID;
$packetDonatedDate = $row->DonatedDate;
}
$donorData = $this->db->get_where('donors', array('DonorID' => $donorID));
foreach ($donorData->result() as $row) {
$donarName = $row->DonorName;
$donorMobile = $row->DonorMobile;
}
你在答案中所做的是不可取的,当你有大数据集时,使用循环从表中获取会大大降低系统速度。预期的是使用 JOIN 查询来连接 donors 和 packets 表,如下所示:
$this->db->select('donors_table.DonorName,donors_table.DonorMobile,packets_table.*')->from('packets_table');
$this->db->join('donors_table','donors_table.DonorID=packets_table.DonorID');
$query = $this->db->get();
$result = $this->db->result();
然后您可以按如下方式遍历每个捐赠者:
foreach($result as $row){
$donarName = $row->DonorName;
$donorMobile = $row->DonorMobile;
}
注意:始终建议从模型中执行任何提取、插入、删除或更新操作,这就是 Codeigniter 是 MVC 的原因。停止直接从控制器中的数据库获取数据。
您好,首先我要告诉您,英语不是我的第一语言,所以请原谅任何误解。我在这里尝试的是使用“数据包”table 中的外键访问“捐助者”table 数据,我需要在控制器中获取该数据才能使用。在我看来,我指的是 PacketID
,在 staff
控制器中,我需要获取特定的 DonorMobile
和 DonorName
才能向该捐赠者发送短信。我尝试创建多个模型函数但没有成功。是不是可以通过这种方式实现,或者有没有其他方式? TIA!
donors
和 packets
tables
donors table 和 packets table
员工控制器 - 我知道您无法在控制器中访问 $donorData->DonorID
等数据
public function markAsUsed($packet)
{
$this->load->Model('Donor_Model');
$donorData = $this->Donor_Model->getDonors($packet);
$this->load->Model('Donor_Model');
$data = $this->Donor_Model->markAsUsed($donorData->DonorID);
$sid = 'twilio sid';
$token = 'twilio token';
$donorMobile = '+94' . $donorData->DonorMobile;
$twilioNumber = 'twilio number';
$client = new Twilio\Rest\Client($sid, $token);
$message = $client->messages->create(
$donorMobile, array(
'from' => $twilioNumber,
'body' => 'Thank you ' . $donorData->DonorName . ' for your blood donation. Your donation has just saved a life.'
)
);
if ($message->sid) {
$this->load->Model('Donor_Model');
$this->Donor_Model->changeStatus($data->isAvailable);
redirect('staff/viewpackets');
}
}
型号
function getDonors($packet) {
$data = $this->db->get_where('packets', array('PacketID' => $packet));
return $data->row();
}
function markAsUsed($donor)
{
$data = $this->db->get_where('donors', array('DonorID' => $donor));
return $data->row();
}
function changeStatus($packet)
{
$data = array(
'isAvailable' => False,
);
return $this->db->update('packets', $data, ['PacketID' => $packet]);
}
找到答案了!您只能使用控制器来执行此操作。
$packetData = $this->db->get_where('packets', array('PacketID' => $packet));
foreach ($packetData->result() as $row) {
$donorID = $row->DonorID;
$packetDonatedDate = $row->DonatedDate;
}
$donorData = $this->db->get_where('donors', array('DonorID' => $donorID));
foreach ($donorData->result() as $row) {
$donarName = $row->DonorName;
$donorMobile = $row->DonorMobile;
}
你在答案中所做的是不可取的,当你有大数据集时,使用循环从表中获取会大大降低系统速度。预期的是使用 JOIN 查询来连接 donors 和 packets 表,如下所示:
$this->db->select('donors_table.DonorName,donors_table.DonorMobile,packets_table.*')->from('packets_table');
$this->db->join('donors_table','donors_table.DonorID=packets_table.DonorID');
$query = $this->db->get();
$result = $this->db->result();
然后您可以按如下方式遍历每个捐赠者:
foreach($result as $row){
$donarName = $row->DonorName;
$donorMobile = $row->DonorMobile;
}
注意:始终建议从模型中执行任何提取、插入、删除或更新操作,这就是 Codeigniter 是 MVC 的原因。停止直接从控制器中的数据库获取数据。