我的模型中有以下测试方法,它获取一行中json列的长度:
public function test(){
return $this->select(DB::raw('JSON_LENGTH((SELECT comments FROM lab_evals WHERE id='.$this->id.'))'))->get();
}
字符串
在tinker中,它返回以下内容:
= Illuminate\Database\Eloquent\Collection {#7430
all: [
App\Models\LabEval {#7429
JSON_LENGTH((SELECT comments FROM lab_evals WHERE id =50)): 2,
},
App\Models\LabEval {#7431
JSON_LENGTH((SELECT comments FROM lab_evals WHERE id =50)): 2,
},
],
}
型
这不是什么大问题,因为我可以直接调用first(),但我想知道为什么集合中有两个对象而不是一个。
我希望这样:
= Illuminate\Database\Eloquent\Collection {#7430
all: [
App\Models\LabEval {#7429
JSON_LENGTH((SELECT comments FROM lab_evals WHERE id =50)): 2,
},
],
}
型
编辑:这是Laravel为某个模型的查询生成的原始SQL。
"select JSON_LENGTH((SELECT comments FROM lab_evals WHERE id=50)) from `lab_evals`"
型
我得到的结果就有意义了。
这是正确的原始SQL,但仍然不确定如何将其转换为Laravel DB查询构建器。
(SELECT JSON_LENGTH((SELECT comments from lab_evals WHERE id=50)));
型
编辑二:
我最后只是这样做,标记为已解决:
DB::select('SELECT JSON_LENGTH((SELECT comments from lab_evals WHERE id='.$this->id.'))')
型
1条答案
按热度按时间bsxbgnwa1#
把你的where从select中移出来,现在它不应用于整个查询,只应用于你的特定选择。像这样的东西应该可以。
字符串