Wednesday, April 12, 2017

Laravel fails to deserialize model with mysql's POINT column

I have a model where column location represents coordinates. This column can be null. When it is null everything is fine, but when there is some data, then:

  1. If it is used inside internal laravel events (which does not implement ShouldBroadcast) then I have to add use SerializesModels, otherwise field is not deserialized, exception is thrown

    invalidPayloadException in Queue.php line 89

  2. If it ised inside broadcast laravel events (which must be delivered into browser) then node.js fails to parse it.

Example: location is null

Event:

{"event":"App\\Events\\ViewingUsersUpdated","data":{"users":[{"id":1,"created_at":"2017-04-12 07:20:16","updated_at":"2017-04-12 07:20:16","creator_id":null,"phone":"70000000000","first_name":"\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 1","last_name":"","middle_name":"","active":1,"manager_id":null,"avatar":"\/img\/profile.png","full_name":"70000000000 \u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 1  ","user_timezone":"Europe\/Moscow"}],"instance":{"id":1,"created_at":"2017-04-12 11:29:06","updated_at":"2017-04-12 13:55:32","creator_id":1,"test_field_text":"1234567892131","user_field_single":null,"image_single":null,"location":null,"address_area":"b8837188-39ee-4ff9-bc91-fcc9ed451bb3","address_region":null,"address_city":"f66a00e6-179e-4de9-8ecb-78b0277c9f10","address_locality":null,"address_street":null,"modelType":"testing"}},"socket":null}

location is not null

Event:

undefined:1

P.S.

Mutator:

$this->attributes[$key] = DB::raw('POINT(' . $value . ')');

Accessor:

$value = unpack('Lpadding/corder/Lgtype/dlatitude/dlongitude', $value);
$value = $value['latitude'] . ',' .    $value['longitude'];



via Jackson J

Advertisement