0

我在 CodeIgniter 模型中有函数,我想简单地将“active_date”记录值放入/复制到“event_date”(在与查询匹配的同一行中)。我尝试给 'event_date' 提供直接值,它的工作。我只是不知道如何处理查询结果。谢谢!

public function postx_model()
  {   
    $data = array(
      'last_status' => $this->input->post('status'),
      );

    if( $this->input->post('status') == 'Active' )
    {
       $this->db->select('active_date');
       $this->db->where('customer_code', $this->input->post('customer_code') );
       $query = $this->db->get('customer_table');

    $data2 = array(
    'event_date' => $query,
    //'event_date' => '2013-09-14', //this is work
      );

      $dataComplete = $data + $data2;
      $this->db->where('customer_code', $this->input->post('customer_code') );
      $this->db->update('customer_table', $dataComplete); 
    }
    else
    {
    $this->db->where('customer_code', $this->input->post('customer_code') );
    $this->db->update('customer_table', $data); 
    }
  }
4

4 回答 4

1

您需要获取查询结果并根据结果进行操作,请参阅下面的注释行...

public function postx_model()
  {   
   $data = array(
  'last_status' => $this->input->post('status'),
  );

if( $this->input->post('status') == 'Active' )
{
   $this->db->select('active_date');
   $this->db->where('customer_code', $this->input->post('customer_code') );
   $query = $this->db->get('customer_table');
   // getting result of query
   $result=$query->result();

//creating data array based on result data 
$data2 = array(
'event_date' => $result->active_date,
//'event_date' => '2013-09-14', //this is work
  );

  $dataComplete = $data + $data2;
  $this->db->where('customer_code', $this->input->post('customer_code') );
  $this->db->update('customer_table', $dataComplete); 
}
else
{
$this->db->where('customer_code', $this->input->post('customer_code') );
$this->db->update('customer_table', $data); 
}

}

于 2013-09-04T08:45:50.147 回答
0

像这样的东西:

$query = $this->db->select('active_date')
->from('customer_table')
->where('customer_code', $this->input->post('customer_code'))
->get()->row_array();
$data2 = array('event_date' => $query['active_date']);
于 2013-09-04T08:11:32.953 回答
0

观察:你注意到这条线是如何一遍又一遍地重复的吗?

  $this->input->post('customer_code') ; 

建议:永远不要在数据库插入或更新中使用 $this->input->post 或类似的东西。只需传入经过过滤、清理、验证并准备就绪的变量或数组。

  // adding TRUE enables xss clean 
  $customerCode = this->input->post('customer_code', TRUE) ;

现在您可以将 $customerCode 用于任何方法 - 它会更清晰、更易于阅读 - 如果表单名称发生更改 - 您只需将其更改一个位置。并且作为奖励,我们添加了 xss 清理。如果您需要在不止一种方法中使用它:

 $this->customerCode = this->input->post('customer_code', TRUE) ;    

现在 $this->customerCode 将可用于类中的任何方法。

===== 编辑 “类中的任何方法都可以使用它的含义是什么?” 好吧——这就是 $this-> 通常在方法(函数)中设置变量时非常酷的地方:$myvariable,你只能在方法中使用它。当您使用 $this->myvariable 时,它​​立即可用于类中的任何方法。

这很酷,但超级酷的是,您可以在模型构造器中设置 $this->variable - 例如数据库表的名称、字段等,例如 $this->dbtable = 'acme_users'; $this->dbfields = 'id,first,last,email';

然后你可以在你的方法中使用像 $this->dbtable, $this->dbfields 这样的通用代码。另一个优点是您可以将关于您的模型的非常具体的知识放在构造函数的顶部 - 然后在您编写的方法代码中更加抽象。这使得重用/扩展更容易。

于 2013-09-04T20:31:14.517 回答
0

你的代码应该是这样的: -

public function postx_model()
{   
    $data = array('last_status' => $this->input->post('status'));
    if( $this->input->post('status') == 'Active' )
    {
       $this->db->select('active_date');
       $this->db->where('customer_code', $this->input->post('customer_code') );
       $query = $this->db->get('customer_table');
       $result=$query->result_array();
       $data2 = array('event_date' => $result['active_date']);
       $dataComplete = $data + $data2;
       $this->db->where('customer_code', $this->input->post('customer_code') );          
       $this->db->update('customer_table', $dataComplete); 
    }
    else
    {
       $this->db->where('customer_code', $this->input->post('customer_code') );
       $this->db->update('customer_table', $data); 
    }
}
于 2013-09-04T08:45:07.957 回答