当我在本地服务器上使用Laravel 5.2中的集合时,我必须使用整数值来过滤值,但是当我在远程服务器上部署时,我必须在函数where上使用字符串值。像这样:
$indicators = Indicator::get();
$main_indicators = $indicators->where('main',1)->all();
//$main_indicators works on local empty on remote
$indicators = Indicator::get();
$main_indicators = $indicators->where('main','1')->all();
//$main_indicators works on remote empty on local
仅在过滤由Eloquent查询创建的集合时才会发生这种情况。 当我在雄辩的查询中使用它时,它在每个服务器上都这样工作:
Indicator::where('main',true)->get();
main是boolean(MariaDB上的tinyInt(1))。
迁移:
$table->boolean('main')->default(false);
本地服务器:MacOSX,Xammp,PHP 7
远程服务器:PHP 7,Apache
我想在每台服务器上使用相同的代码,我想更改远程服务器,但我不知道要设置什么。它真的很讨厌开发两个版本......
两台服务器上的数据库都是相同的。
Web服务器是Apache。感谢
答案 0 :(得分:0)
好的,您没有正确使用where
查询。这需要指定 之前 到get
或全部。
您的代码应该如下(基于您当前的代码):
$indicators = new Indicator; // Indicator::all() also works.
$main_indicators = $indicators->where('main',1)->get();
但那很难看。而是在控制器构造或方法本身中注入Indicator
类。我将使用下面的控制器注入方法示例:
public function someFunction(Indicator $indictors) {
$main_indicators = $indicators->where('main', true)->get();
}
或者只是这样做:
$main_indicators = Indicator::where('main', true)->get();
第二个例子应该是你的首选,恕我直言;)
答案 1 :(得分:0)
主要问题是MySQL驱动程序:PHP + PDO + MySQL: how do I return integer and numeric columns from MySQL as integers and numerics in PHP?
但是通过将强制转换设置为模型可以很容易地解决这个问题:
//Indicator model
protected $casts = [
'main' => 'boolean'
];