Laravel中如何判断模型pluck返回值与指定字符串是否相等
问题原因说明
你当前对比失败的核心原因有两点:
pluck()方法返回的是Illuminate\Support\Collection集合对象,不是纯字符串。直接传入strcmp做对比时,集合会被自动序列化为JSON字符串,也就是你输出看到的[["مؤهل"]]格式文本,和单独的"مؤهل"字符串对比自然不相等。- 你拿到的集合是二维结构,说明关联查询返回的结果是嵌套数组形式。
构造匹配[["مؤهل"]]格式的变量
这个格式是标准二维数组结构,直接声明即可:
$targetStructure = [["مؤهل"]]; // 要和pluck的输出做结构一致性对比,先把集合转为数组即可 $isStructureMatched = $checkResult->toArray() === $targetStructure;
验证取值是否等于مؤهل
根据你的关联类型选择对应方案即可:
- 如果
InitialStudy()是一对一关联(只会返回单条数据),不需要用pluck,直接取关联字段即可:$isValueEqual = Auth::user()->InitialStudy->result === "مؤهل"; - 如果
InitialStudy()是一对多关联(返回多条数据,需要判断是否存在目标值),用集合内置方法处理即可:// 先把二维集合压平为一维,再判断是否包含目标值 $hasTargetValue = Auth::user()->InitialStudy()->pluck("result")->flatten()->contains("مؤهل");
如果需要用strcmp做精确对比,先取出目标值再操作:
// 压平后取第一个结果值 $firstResult = $checkResult->flatten()->first(); $strcmpResult = strcmp($firstResult, "مؤهل"); // 两个字符串相等时返回0
内容的提问来源于stack exchange,提问作者amnah
相关产品推荐
相关产品推荐

