我使用jenssegers/laravel-mongodb
包(对于Laravel),我试图将浮点值存储在数据库中,这样我就可以对它们进行排序,但它总是将它们存储为字符串。我尝试使用$casts
属性,我尝试直接投射,例如$some_value = (float)$value;
,但它不起作用。
是否有可能在调用orderBy函数时强制转换属性,换句话说,是否可以欺骗Eloquent,因此它将行命令为float,而不是字符串(我试图用mutator修复它但仍然没有进展)。
编辑:
这是我使用的变种器。它适用于" int"部分,但是当它浮动时,rate
将被转换为字符串。
我尝试将所有内容转换为浮动,但它没有帮助
public function setRateAttribute($value)
{
if(strpos($value, ".") !== false or is_float($value)) {
$this->attributes['rate'] = (float)$value;
} else {
$this->attributes['rate'] = (int)$value;
}
}
EDIT2:
$c = new \App\Contractor();
$c->rate = "1.5";
$c->save();
这是php artisan tinker
的示例,在应用程序中仅与其他字段相同。
问题是某些条目转换为float
但有些条目是string
。我无法随时重现它,它是随机发生的。
当我遍历所有条目并var_dump
仅率:
string(5) "16.67"
string(5) "33.33"
string(5) "24.44"
string(5) "33.33"
string(5) "33.33"
string(5) "27.78"
string(5) "27.78"
string(4) "8.89"
string(4) "6.67"
string(5) "22.22"
string(5) "16.67"
int(0)
float(1.5)
float(1.5)
答案 0 :(得分:-1)
MongoDB不直接支持float;它有两倍,所以你可以使用 $ some_value =(double)$ value;
您需要确保语法正确。