如果你的数据库字段 api_node_id
值是以逗号分隔的多个云系统节点ID(例如 "node_id_1,node_id_2,node_id_3"
),而你需要根据单个 node_id
查找,可以使用 SQL 的 FIND_IN_SET
函数来执行该查询。
以下是更新后的代码示例:
/**
* 根据云实例的节点ID获取云服务器在本地的节点数据
* @param $data
* @return mixed
*/
private function getNodeId($data)
{
return CloudNodeModel::whereRaw("FIND_IN_SET(?, api_node_id)", [$data['node_id']])->value('id');
}
说明:
whereRaw
方法: 这个方法允许你直接写 SQL 查询,可以为特定的 SQL 函数提供更大的灵活性。在这里我们使用FIND_IN_SET
来检查api_node_id
中是否包含指定的node_id
。- 参数绑定:
?
是一个占位符,实际查询时会用[$data['node_id']]
进行绑定,防止 SQL 注入。
注意事项:
- 这种方法在性能上可能不如正常的索引查询,特别是当
api_node_id
的值很大或者有很多条记录时。因此,建议在设计数据库架构时,尽量使用正规的表结构,以避免这样的字符串存储。 - 确保
node_id
的值格式正确,即在查询时与api_node_id
中的格式匹配。