Laravel方法属性ToArray()未在生产环境中运行


Laravel method attributesToArray() not running on production

我正在将我的应用程序部署到我的生产环境,但它没有按预期工作。我已将问题缩小到控制器中此循环中的一行;

foreach($temp_table_data as $a_payment) {
  //array_push($payments, $a_payment->payment); //big collection object
  array_push($payments, $a_payment->payment->first()->attributesToArray()); //smaller object
}

我得到的错误是call to a member function attributesToArray() on a non object.这似乎很疯狂,因为 - 正如老话所说 - 它在我的机器上运行良好。

我的开发环境是 PHP 5.5.21 上的 Ubuntu trusty64,我的产品是 RedHat Linux PHP 5.5.11。我认为这些差异非常小(也许我错了?

如果我做一个print_r($temp_table_data()那么我会得到一个大集合返回。两台服务器上相同。所以在某些时候,它只是停止喜欢payment(这是一种方法)或first()

这是我的部分 TempTable.php 带有付款方式的模型;

public function payment(){
    return $this->hasMany('App'Models'Payment', 'Vendor ZIP', 'postcode');
}

还有我的Payment.php模型(其中的一部分);

class Payment extends Model {
protected $table = 'headquarters_data';
public function tempTable()
{
    return $this->belongsTo('App'Models'TempTable', 'postcode', 'Vendor ZIP');
}
其中一个

tempTable模型没有PaymentattributesToArray()方法失败。

试试这个,看看它是否有效。

foreach($temp_table_data as $a_payment) {
    $payment =  $a_payment->payment->first();
    if(!is_null($payment)){
          $payments[] = $payment->attributesToArray();
    }
}

问题是在生产中您可能已经更改了数据库中的数据并且调用first()方法返回null,然后您正在尝试在null上调用attributesToArray(),这是错误的!
你应该在调用 attributesToArray() 之前做一个 isset() 函数。

if(isset($a_payment->payment->first()))
 array_push($payments, $a_payment->payment->first()->attributesToArray());