使用 LIKE 模糊查询,数据库中 Null 值查询不到
如题,使用 LIKE 模糊查询,数据库中 Null 值查询不到,Thinkphp 查询条件中如何将数据库的空值转换为空字符串以查询出来?

主要是关联查询中,右表没有查询到关联的数据(为 null),使用 LIKE 查询后造成的,如何将 null 转换为空字符串或者数字0?
要么改数据库数据结构not null ,要么加默认值,要么查询的时候: ->whereOr([['name','like','%%'],['name','null',null]])
要么改数据库数据结构not null ,要么加默认值,要么查询的时候: ->whereOr([['name','like','%%'],['name','null',null]])
数据表本身的字段已经改默认值了,这种还好。主要是有使用左连接的,因为链接不到数据,右表对应的字段都变成 null 了。这种能不能提供一个方法将右表链接的时候如果找不到对应的数据,转换下 NULL 为空字符串。这样使用 LIKE 查询的时候应该就没问题了。
https://www.kancloud.cn/manual/thinkphp6_0/1037600
$users = User::withJoin('profile', 'LEFT')->select();
foreach ($users as $user) {
echo $user->profile->name;
}
https://www.kancloud.cn/manual/thinkphp6_0/1037600
$users = User::withJoin('profile', 'LEFT')->select(); foreach ($users as $user) { echo $user->profile->name; }
感谢
麻烦再请教一下,where 与 hasWhere 是不是不能链式调用?这里生成的 SQL 语句只有最后一个 hasWhere 的内容。
![]()
麻烦再请教一下,where 与 hasWhere 是不是不能链式调用?这里生成的 SQL 语句只有最后一个 hasWhere 的内容。
将 where 放在 hasWhere 后会报错:

hasWhere必须静态调用(第一个)。一些复杂的关联查询,可以直接在where里加前缀,比如: ··· ->where('guanlian.ziduan','like',"%%") ···
字段设定为NOT NULL DEFAULT ''这样就不会出现NULL值,数据库表结构的基本设定范式。 设定可以NULL会让查询变得很复杂
不好意思,我是新手。上面的文档看了。我尝试这么写但是报错了,麻烦问下有没有文档或者参考代码可以学习下的?是不是所有同名字段都要带上前缀?

是的,使用关联查询的时候,原则上都要加前缀,但实际上不用。
但是所有重复名称的字段必须要加,比如你这里的department.name,这里的报错也有可能是你的$where变量里有些name没有加前缀。
是的,使用关联查询的时候,原则上都要加前缀,但实际上不用。 但是所有重复名称的字段必须要加,比如你这里的
department.name,这里的报错也有可能是你的$where变量里有些name没有加前缀。
对,是这个情况,$where 中确实有 name ,感谢回复。我再想想其他较好的书写方法吧。