Laravel 5 + Eloquent toJson / toArray导致奇怪的分段错误

时间:2015-06-26 07:38:51

标签: php laravel eloquent laravel-5

我讨厌回答我自己的问题,所以也许你可以帮我找到解决这个问题的方法。

我有一些雄辩的模型属于彼此,我通过这样的关联设置它们。这都是正常的事情。

这个过程不幸导致$ device工作不正常。您可以在下面看到可以访问各个值,但任何形式的jsonification都会在没有错误的情况下销毁服务器。

$device = $truck->device;
if(is_null($device) || empty($device)) {
    $device = new Devices;
}
$device->truck()->associate($truck);
$device->fleet()->associate($fleet);
$device->serial = $device_input['serial'];

$device->save();
$truck->device()->associate($device);
$truck->save();

error_log( $device->id );               //OK
error_log( $truck->device->id );        //OK
error_log( $device->toJson() );         //ERROR SEGMENTATION FAULT
error_log( $truck->toArray() );         //ERROR SEGMENTATION FAULT
error_log( $truck->device->toJson() );  //ERROR SEGMENTATION FAULT
error_log( $truck->device->toArray() ); //ERROR SEGMENTATION FAULT
error_log( json_encode($device) );             //ERROR SEGMENTATION FAULT
error_log( json_encode($truck->device) );      //ERROR SEGMENTATION FAULT

1 个答案:

答案 0 :(得分:3)

Laravel没有正确处理错误。

首先,检查你的表。当我打印设备表时,我可以看到每次运行时都会创建新设备,这意味着关联显然无法正常工作。

我在if语句中移动了我的关联,如:

if(is_null($device) || empty($device)) {
    $device = new Devices;
    $device->truck()->associate($truck);
    $device->fleet()->associate($fleet);
}

因此只有在创建设备时才会发生关联。 您认为将关联设置为已经关联的对象并不会破坏它。

奇怪的是价值可以单独访问,但不能像json那样访问。如果有人知道任何laravel开发者或发布此官方错误报告的地方让我知道