将数组从控制器传递到 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->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 中的控制器?