Laravel方法attributesToArray()没有在生产中运行

时间:2015-06-19 12:32:51

标签: php laravel laravel-5

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

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');
}

2 个答案:

答案 0 :(得分:1)

问题是在制作中你可能已经改变了数据库中的数据并调用第一个()方法返回 null 然后你试图调用 attributesToArray ()在 null 上,这是错误的! 你应该在调用attributesToArray()之前做一个 isset()函数。

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

答案 1 :(得分:1)

其中一个for(var i = 0; i < 5; i++){ var cha = document.createElement('div'); $(cha).css('background','url(img/stand.gif)'); cha.addEventListener('click',function(){ $(cha).css('background','url(img/walk.gif)'); setTimeout(function(p = cha){ $(p).css('background','url(img/walk.gif)'); },8000); }); } 模型没有tempTablePayment方法失败。

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

attributesToArray()