Codeigniter 2 $this->db->join 与 $this->db->update 一起使用

Posted

技术标签:

【中文标题】Codeigniter 2 $this->db->join 与 $this->db->update 一起使用【英文标题】:Codeigniter 2 $this->db->join used with $this->db->update 【发布时间】:2013-05-31 13:52:26 【问题描述】:

我刚刚意识到你不能使用:

$this->db->join()

$this->db->update()

看起来“join”是由codeigniter执行的,但没有在查询中使用,在更新基表后看到:$this->db->last_query();

我看到没有加入。然后我尝试更新连接表,认为只有在需要时才会使用连接,但我没有工作并告诉我错误 1054“where 子句中的未知列 XXX”。

有没有办法强制codeigniter?我构建软件的方式,我真的不想自己构建查询的所有不同部分(join、where)和调用 $this->db->query()。

注意:我看到了这些链接:

Codeigniter active record update statement with a join

Is it possible to UPDATE a JOINed table using Codeigniter's Active Record?

codeigniter - database : how to update multiple tables with a single update query

但是如果有人知道更简洁的方法那就太好了,因为这些解决方案不适用于我的情况,因为我在“preProcessing()”方法中使用了相同的连接,该方法使用连接来预览更改,然后使用相同的“preProcessing()”方法进行替换

【问题讨论】:

我注意到连接语句都在 $this->db->ar_join 中。也许有办法强制这些 【参考方案1】:

好吧,我设法找到了一个“干净”的解决方案,使用 codeigniter 的 join、set 等。所以很酷的是你将拥有使用 $this->db->join()、$this- 的所有 CI 好处>db->join() 等,比如转义和添加引号。

所以首先做你所有的 CI 工作:

$this->db->join(..) // Set all your JOINs
$this->db->set(..) // Set your SET data
$this->db->where(..) // Set all your WHEREs

然后您可以使用 Active Record 的就绪、清理和转义的查询元素构建查询:

// JOIN
$sql = "UPDATE $this->baseTable ";
$sql .= implode(' ', $this->db->ar_join);

// SET
$sql .= ' SET';
$setArray = array();
foreach ($this->db->ar_set as $column=>$newValue)
    array_push($setArray, " $column = $newValue");
$sql .= implode(',', $setArray);

// WHERE
$sql .= ' WHERE '.implode(' ', $this->db->ar_where);

$this->db->query($sql);

如果有人有更好的解决方案,我很乐意接受并改用它

【讨论】:

以上是关于Codeigniter 2 $this->db->join 与 $this->db->update 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter模型中的Mysql日期格式

如何使用 codeigniter 让 zend studio 自动完成

Codeigniter - 如果数据库查询没有返回结果,则执行操作

如何在 Codeigniter 中连接两个表

$this->db->query() 啥都不返回 CodeIgniter

Codeigniter 将 2 个参数传递给回调