如何在codeigniter中更新列设置为NULL的表

问题描述 投票:0回答:4

我在将数据设置为NULL的更新列时遇到问题,我有一个表

user
,每一列都是
id_parent
列,用户可以删除父级并可以添加父级,所以如果
user
有一个
parent
id_parent
将与用户的
parent id
一起设置,但用户可以删除父级的数据,因此如果
user
删除父级的数据,
id_parent
列将设置为 NULL。那么如何在数据库中将数据设置为空不是
" "
而是
NULL
。 这是我的
user
桌子。

user

id_user | name | address | id_parent
php mysql codeigniter activerecord null
4个回答
6
投票

用它来设置空列。它会起作用,不要忘记在活动记录上的第三个参数 SET 上添加 false

$this->db->set('id_parent', 'NULL', false);

5
投票

您可以在“模型”中尝试此代码,希望它能起作用:

public function update_std_marks($id_user) {

    $this->db->set('id_parent', null);
    $this->db->where('id_user', $id_user);
    $this->db->update('user');
}

4
投票

我很好奇,所以我想看看 CodeIgniter 的 Active Record 在处理空值时如何处理不同的语法变化。 我将为

where()
set()
方法调用绘制几个测试用例。 下面的示例按照呈现正确 SQL 的能力排序,然后是正确引用的标识符,最后是语法简洁性。

where()
电池测试:

|品质 |语法 | SQL | | ---| ---| --- | | ⭐ |

->where('col')
|

`colIS NULL</pre> | | ✅ |->where('col', null) | <pre>\colIS NULL</pre> | | ✅ |->where('col IS NULL') | <pre>\colIS NULL</pre> | | ✅ |->where(['col' => null]) | <pre>\colIS NULL</pre> | | ✅ |->where ('col IS NULL', null) | <pre>\colIS NULL</pre> | | ⚠️ |->where('col', null, false)| <pre>col IS NULL</pre> | | ⚠️ |->where('col IS NULL', null, false)| <pre>col IS NULL</pre> | | ⚠️ |->where(['col' => null], null, false)| <pre>col IS NULL</pre> | | ❌ |->where('col', 'NULL', false)| <pre>col =  NULL</pre> | | ❌ |->where('col', 'IS NULL', false)| <pre>col =  IS NULL</pre> | | ❌ |->where('col', 'NULL' ) | <pre>\col= 'NULL'</pre> | | ❌ |->where('col', 'IS NULL') | <pre>\col` = 'IS NULL'
|


set()
电池测试:

|品质 |语法 | SQL | | ---| --- | --- | | ⭐ |

->set('col', null)
|

`col= NULL</pre> | | ✅ |->set(['col' => null]) | <pre>\col= NULL</pre> | | ⚠️ |->set('col', 'NULL', false)| <pre>col = NULL</pre> | | ❌ |->set('col') | <pre>\col= ''</pre> | | ❌ |->set ('col = NULL') | <pre>\col = NULL= ''</pre> | | ❌ |->set('col = NULL', null) | <pre>\col = NULL= NULL</pre> | | ❌ |->set('col = NULL', null, false)| <pre>col = NULL = </pre> | | ❌ |->set( 'col', '= NULL') | <pre>\col= '= NULL'</pre> | | ❌ |->set('col', '= NULL', false)| <pre>col = = NULL</pre> | | ❌ |->set('col', 'NULL') | <pre>\col= 'NULL'</pre> | | ❌ |->set('col' , null, false) | <pre>\col = 
| | ❌ |
->set(['col' => null], null, false)
|
`col = 
|


2
投票

您的用户表的

id_parent
字段中的属性必须设置为 is_null。否则你不能。

查询应该类似于

Update table user set id_parent = null where id_user = X

您可以使用此查询将该列设置为可为空:

ALTER TABLE user MODIFY id_parent int(11) null;

在 codeigniter 上试试这个:

$fields = array(
                        'id_parent' => array(
                                                         'name' => 'id_parent',
                                                         'type' => 'INT',
                                                ),
);
$this->dbforge->modify_column('user', $fields);

或者简单地说:

$this->db->query('ALTER TABLE user MODIFY id_parent int(11) null;');
© www.soinside.com 2019 - 2024. All rights reserved.