【问题标题】:How to pass multiple parameters from different controller functions on single model function如何在单个模型功能上传递来自不同控制器功能的多个参数
【发布时间】:2019-12-04 09:24:23
【问题描述】:

我有两个控制器函数都需要一个模型函数,但是当我将参数传递给单个模型函数时,它会显示错误,如果有另一种传递参数的方法,我需要帮助

控制器

public function view_files()
{
    $assignment_id='1255';
    $data['files'] = $this->AdminModel->getRows111();
    $this->load->view('admin/view_files', $data);
}

function download_test1(){
    $id = $this->uri->segment(3);

    if (empty($id)){
           redirect(base_url());
    }

    $data = $this->AdminModel->getRows111($id);
    $filename =$data['assignment_file_name'];
    $fileContents = file_get_contents(base_url('upload/'. 
         $data['assignment_file_name'])); 

    force_download($filename, $fileContents);

}

型号

public function getRows111($id=''){
    $this->db->select('*');
    $this->db->where('assignment_id','1255');
    $this->db->from('tbl_assignments_files');

    if($id){
        $this->db->where('assignment_file_id',$id);
        $query = $this->db->get();
        $result = $query->row_array();

    }else{
       $query = $this->db->get();
       $result = $query->result_array();

    }

    return !empty($result)?$result:false;

   }
}

功能1

$data['files'] = $this->AdminModel->getRows111(assignment_id);

功能2

$data = $this->AdminModel->getRows111($id);

模型这样做会显示错误

public function getRows111($id='',$assignment_id){

【问题讨论】:

  • 对错误更具体。
  • 这是错误:AdminModel::getRows111() 函数的参数太少

标签: php codeigniter model controller


【解决方案1】:

你用错了函数, 基于function getRows111,它确实有2个参数需要$id$assignment_id

正确使用会是这样的,

$this->AdminModel->getRows111($id, $assignment_id);

我建议你的函数让它更灵活是这样的。

public function getRows111($array){
    $id = $array[0];
    $assignment_id = $array[1];
}

然后使用数组参数调用函数

$this->AdminModel->getRows111([$id, $assignment_id]);

处理数组,你希望它更灵活。

public function getRows111($array){
    $id = isset($array['id']) ? $array['id'] : "";
    $assignment_id = isset($array['assignment_id']) ? $array['assignment_id'] : "";
}

这样调用函数

$this->AdminModel->getRows111(
   ['id' => $id,
    'assignment_id' => $assignment_id
]);

// if you want just the id
$this->AdminModel->getRows111(['id' => $id]);

// or the the assignment id

$this->AdminModel->getRows111(['assignment_id' => $assignment_id]);

【讨论】:

  • 谢谢老兄,尝试
  • 问题是我有两个不同的控制器函数,我传递的数组参数仍然为我的模型函数抛出太少的参数
  • 我可以看看你是怎么用的吗?
  • 我将赋值 ID 传递给像这样的第二个函数 $this->download_test1($assignment_id);``` and in 2nd function like this $data = $this->AdminModel->getRows111($id,$assignment_id);` ,模型函数 public function getRows111($array){ $id = isset($array['id']) ? $array['id'] : ""; $assignment_id = isset($array['assignment_id']) ? $array['assignment_id'] : "";}
  • 函数getRows111只接受数组,所以应该是这样的$data = $this->AdminModel->getRows111(['id'=>$id, 'assignment_id'=>$assignment_id]);
【解决方案2】:
public function getRows111($id='',$assignment_id=""){
        $this->db->select('*');
        $this->db->from('tbl_assignments_files');

        //if assignment_id is not empty it will add where clause to statement
        if($assignment_id != ""){
           $this->db->where('assignment_id',$assignment_id);
        }
       //if id is not empty it will add where clause to statement
        if($id != ""){
            $this->db->where('assignment_file_id',$id);   
        }
      $query = $this->db->get();
      $result = $query->result_array();

        return !empty($result)?$result:false;
    }
}

调用模型函数第一个参数是$id,第二个参数是$assignment_id

通过$id调用模型函数

$data = $this->AdminModel->getRows111($id); 

 $data = $this->AdminModel->getRows111($id,''); 

通过 $assignment_id 调用函数

$data = $this->AdminModel->getRows111("",$assignment_id);

通过 $id 和 $assignment_id 调用函数

 $data = $this->AdminModel->getRows111($id,$assignment_id);

希望这会有所帮助!

【讨论】:

  • 下载出现问题
  • 是的,问题是当我转到此页面甚至刷新它时,.docx 文件会自动下载而无需单击它可能是 force_download() 的错误。如果您有任何想法,请建议我
  • 即我有 3 个文件,其中 2 个是图像,1 个是 .docx 图像文件只有在我单击下载按钮时才会下载,而 .docx 在页面刷新时开始下载
  • 在哪里可以看到 force_download() 函数?
猜你喜欢
  • 2019-12-27
  • 2015-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
  • 2020-02-27
  • 2018-08-12
相关资源
最近更新 更多