Laravel 5 - 远程服务器上的集合为空(整数/字符串错误Apache)

时间:2016-06-20 19:02:06

标签: php apache laravel

当我在本地服务器上使用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。感谢

2 个答案:

答案 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'
];