我正在将我的应用程序部署到我的生产环境,但它没有按预期工作。我已将问题缩小到控制器中此循环中的一行;
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
模型没有Payment
,attributesToArray()
方法失败。
试试这个,看看它是否有效。
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());