将数组从控制器传递到 codeigniter 中的模型

Posted

技术标签:

【中文标题】将数组从控制器传递到 codeigniter 中的模型【英文标题】:Pass an array from controller to model in codeigniter 【发布时间】:2012-12-12 12:58:53 【问题描述】:

我正在 Codeigniter 中做一个项目。在这里,我使用 imap 从我的 gmail id 获取最新的 10 封邮件。在这里,我想获取已获取邮件的 from 字段,并且我想检查已获取邮件的 from 字段是否在我的数据库 table('clients') 中。在这里,我将 10 from field of fetched mail 存储到数组并将其传递给模型,在那里进行检查并返回匹配的字段名称。但这对我不起作用。

我的控制器功能是:

if ($mbox = imap_open($authhost, $user, $pass)) 
                $emails = imap_search($mbox, 'ALL');
                $some = imap_search($mbox, 'SUBJECT "Suspicious sign in prevented"', SE_UID);
                $MC = imap_check($mbox);
                $inbox = $MC->Nmsgs;
                $inboxs = $inbox - 9;
                if ($emails) 
                    $data['overview'] = imap_fetch_overview($mbox, "$inboxs,$inboxs:$inbox", 0);
                    $i = 0;
                    foreach ($data['overview'] as $i => $val) 

                        $from[$i] = $val->from;
                        $i++;
                    

                    $data['result'] = $this->crm_model->get_names($from);
                    foreach ($data['result'] as $row) 
                        echo $row->name;echo "<br/>";
                    

                
                imap_close($mbox);
            

而我的模型函数是:

function get_names($from) 

    $this->db->select('name');
    $this->db->from('clients');
    $this->db->where_in('name', $from);
    $query = $this->db->get();
    return $query->result();

但是当我像下面这样使用上面的模型函数时,它会返回值

function get_names() 
                  $options = array(
                         '0' => 'Job Openings',
                         '1' => 'Offers',
                         '2' => 'Techgig',
                         '3' => 'Australia',
                        );

        $this->db->select('name');
        $this->db->from('clients');
        $this->db->where_in('name', $options);
        $query = $this->db->get();
        return $query->result();
    

我认为问题在于将值从控制器传递到模型。谁能帮我。提前致谢

【问题讨论】:

尝试在模型本身中打印 $query->result_array()! @sandip 我测试了 $query->result_array() 并在那里回显结果。不返回任何值仅空页面 等一下,你回显了它,它显示空数组()对吗? 尝试通过 print_r() 打印数组 @sandip 我试过 foreach ($query->result_array() as $row) echo $row['name']; 在模型中它什么都不返回。一个空页面。 【参考方案1】:

在使用 where_in(逗号分隔值列表)在数据库中执行任何查询时, 值列表应该是这样的数组:

$options = array('Hello', 'World!', 'Beautiful', 'Day!');

不是这样的:

 $options = array('0' => 'Job Openings','1' => 'Offers','2' => 'Techgig','3' =>'Australia',);

要做到这一点,你应该内爆这个数组!

$opt=implode(",",$options);

并将这个 $opt 数组传递给 WHERE_IN()

希望这能解决您的问题!

【讨论】:

当我尝试使用内爆数组时,它不会返回任何东西。只有空屏幕。 No.When I used the array $options = array('0' => 'Job openings','1' => 'Offers','2' => 'Techgig','3 ' =>'澳大利亚',);它返回结果。当我像这个 Job Openings,Offers,Techgig,Australia 一样内爆相同的数组并将内爆的数组传递给 where_in 子句时,它不会返回值。 implode() 将您的数组转换为字符串.. 您无法将字符串传递给where_in().. 所以此方法失败【参考方案2】:

您不必使用$i..

if ($emails) 
                $data['overview'] = imap_fetch_overview($mbox, "$inboxs,$inboxs:$inbox", 0);
               // $i = 0;
                foreach ($data['overview'] as $val) 

                    $from[] = $val->from;
                    //$i++;
                

                $data['result'] = $this->crm_model->get_names($from);
                foreach ($data['result'] as $row) 
                    echo $row->name;echo "<br/>";
                

            

进行这些更改并检查

【讨论】:

我已经检查了您的建议。但没有返回任何值。仅空页面。 @Balu 好的,现在您将 $val-&gt;from 存储在 $from[] 中,正确.. print_r($from) 在控制器中的 foreach 循环之后并检查您得到了什么 @Balu 如果那里一切正常,print_r($from) 在你的模型函数中检查你的数据。如果这也很好,那么你得到的空页面将是一个数据库问题 我有一个像这样的数组 ( [0] => "Anitha (HR)" [1] => Techgig [2] => Govt Jobs [3] => Techgig .... ) 在控制器和模型中使用 print_r($from) 时。 但是当我使用像 $options = array('0' => 'Job openings', '1' => 'Offers', '2' => 'Techgig'); 这样的数组时它返回值。

以上是关于将数组从控制器传递到 codeigniter 中的模型的主要内容,如果未能解决你的问题,请参考以下文章

将数组数据从视图传递到控制器并反向 php codeigniter

在 codeigniter 中,如何将数组值从控制器传递到同一视图页面?

如何将结果从模型传递到 CodeIgniter 中的控制器?

CodeIgniter:将参数从视图传递到控制器?

无法将变量从控制器传递到模型以处理codeigniter中的多个上载字段

在 CodeIgniter 3 中访问关联数组中的数据