当我在本地服务器上的laravel 5.2中使用laravel 5.2的位置时,我必须使用整数值来过滤值,但是当我在远程服务器上部署时,我必须在功能上使用字符串值。这样:
$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
这种情况仅在过滤由雄辩查询创建的集合时才发生。当我在雄辩的查询中使用时,它在每个服务器上都这样工作:
Indicator::where('main',true)->get();
Main是布尔(Mariadb上的Tinyint(1))。
迁移:
$table->boolean('main')->default(false);
本地服务器:MACOSX,XAMMP,PHP 7
远程服务器:php 7,apache
我想要每个服务器上的相同代码,我想更改远程服务器,但是我不知道要设置什么。它真的很烦人开发两个版本...
数据库在两个服务器上都是相同的。
Web服务器是Apache。谢谢
主要问题是mysql驱动程序:php pdo mysql:如何从mysql中返回整数和数字列,为整数和php中的数字?
但是,可以通过将铸件设置为模型来真正可以很容易地解决:
//Indicator model
protected $casts = [
'main' => 'boolean'
];
好吧,您无法正确使用where
查询。需要指定 prier 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();
第二个示例应该是您的首选;)