ActiveRecord where_in()与数组

Twh*_*ler 4 php mysql activerecord codeigniter

到目前为止,我已经尝试了几种不同的方法来解决这个问题.我收到此错误消息:

'where子句'中的未知列'Array'

SELECT*FROM(Articles)WHERE idIN(Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array, Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array,Array)

这是我的型号代码:

function getStarNews($user_id) {
    $this->db->select('id');
    $this->db->where('user_id', $user_id);
    $query = $this->db->get('table1');

    foreach ($query->result_array() as $id)
    {
        //echo $id['id']."<br>"; //displays all of the correct ids I am trying to pass to the where_in()
    }
    $id = $query->result_array();

    $this->db->where_in('id', $id); //pass array of 'id' from above query
    $data = $this->db->get('Articles');

    return $data->result_array();
}
Run Code Online (Sandbox Code Playgroud)

如果我改变id数组只包含1个值,那么where_in()子句工作正常并输出匹配单个'id'的数据行.

我已经遍布堆栈和谷歌寻求使用where_in()的帮助,我认为我已经有了一切正确或尝试了几种不同的方法来正确传递数组.

谢谢您的帮助.

编辑:最后我将使用我的控制器输出这些数据:

$this->output->set_output(json_encode($data));
Run Code Online (Sandbox Code Playgroud)

出于测试目的,我只是跳过JSON并尝试直接从模型中使用PHP输出数据.

Mic*_*l K 16

您尝试传递的数组是一个多维数组.而是试试这个:

$ids = array();
foreach ($query->result_array() as $id)
    {
        $ids[] = $id['id'];
    }

$this->db->where_in('id', $ids);

您不能在没有迭代的情况下展平query-> result_array().但是如果你需要在你的应用程序中处理这种类型的查询,并且如果你安装了> = PHP 5.3,你可以将以下函数放在Codeigniter帮助文件(或其他合适的地方)中,以帮助你展平数组:

function flatten(array $array) {
    $return = array();
    array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
    return $return;
}

在你的情况下使用它像这样:

    $ids = flatten($query->result_array());
    $this->db->where_in('id', $ids);