【问题标题】:ActiveRecord where_in() with array [closed]带有数组的 ActiveRecord where_in() [关闭]
【发布时间】:2013-06-18 23:05:04
【问题描述】:

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

“where 子句”中的未知列“数组”

SELECT * FROM (Articles) WHERE id IN (数组,数组,数组,数组,数组,数组,数组,数组,数组,数组,数组,数组,数组,数组,数组,数组,数组, 数组, 数组, 数组, 数组, 数组, 数组, 数组, 数组, 数组, 数组, 数组, 数组, 数组, 数组, 数组, 数组)

这是我的型号代码:

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();
}

如果我将 id 数组更改为仅包含 1 个值,则 where_in() 子句可以正常工作并输出与单个“id”匹配的数据行。

在使用 where_in() 时,我查看了整个堆栈和谷歌以寻求帮助,我认为我一切都正确,或者尝试了几种不同的方法来正确传递数组。

感谢您的帮助。

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

$this->output->set_output(json_encode($data));

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

【问题讨论】:

    标签: php mysql codeigniter activerecord


    【解决方案1】:

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

    $ids = 数组(); foreach ($query->result_array() as $id) { $ids[] = $id['id']; } $this->db->where_in('id', $ids);

    如果没有迭代,您无法展平查询->result_array()。但是,如果您需要在应用程序中大量处理此类查询,并且如果您安装了 >= PHP 5.3,则可以将以下函数放入 Codeigniter 帮助文件(或其他合适的位置)中以帮助您展平数组: 函数展平(数组$数组){ $return = 数组(); array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; }); 返回 $return; }

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

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

    【讨论】:

    • 我当前没有在 foreach 循环中运行查询,所以我认为这只会从数组中提取第一个 id,然后将其传递给 where_in() 而不是将数组传递给 where_in( )
    • 效果很好,谢谢。我刚刚在聊天中提到使用 foreach 将项目放入另一个数组作为解决方案,我只是错过了 $ids = array();谢谢!'
    • 您不必将查询放入循环中,只需构建一个不关联的数组。
    • 只是为了争论,有没有其他方法可以将关联数组转换为平面数组?或者不是从 '$this->db->get() 中获取关联数组,而是返回一个平面数组??
    • 似乎结果是一个多维数组,没有迭代就无法展平:ellislab.com/forums/viewthread/147384/#718443
    猜你喜欢
    • 1970-01-01
    • 2019-07-03
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 2014-02-12
    • 1970-01-01
    相关资源
    最近更新 更多