【发布时间】:2020-10-05 20:59:10
【问题描述】:
在 Laravel 队列中遇到一个奇怪的问题。可能是我在事件和队列方面做错了什么。
背景
我有一个事件,该事件被广播到推送者,所以,我们有broadcastWith() 方法。只是为了随时了解情况,这种broadcastWith() 方法有时可能是一个很大的数组。但这并没有推送广播的限制那么大。
我正在尝试将事件的数据保存在jobs 表中。触发该事件时,我们会收到此错误:
照亮\数据库\查询异常
SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'queue' at row 1 (SQL: insert into `jobs` (`queue`, `attempts`, `reserved_at`, `available_at`, `created_at`, `payload`) values ([{"id":246,"visit_id":337,"doctor_id":109,"patient_id":1,"enqueued_at":"2020-06-16 14:16:39","dequeued_at":null,"created_at":"2020-06-16 14:16:39","updated_at":"2020-06-16 14:16:39","patient":{"id":1,"user_id":8,"person_id":7,"created_at":"2020-05-18 15:56:31","
.......<a very big chunk of json>
它试图将数据保存在jobs 的queue 列中。这是laravel生成的表,queue列的类型是varchar(255)。我被困!为什么 Laravel 本身在容量仅为 255 的情况下尝试处理 queue 表中的长 json 数据?我确信更改数据类型并增加队列列的容量不是这里的解决方案。所以,
我在这里做错了什么?
【问题讨论】:
-
您需要将列类型从
VARCHAR更改为LONGTEXT。 -
不,正如我在问题中所说的那样。我确信这不是解决方案。 Laravel 自己生成表,Laravel 也自己插入值。可能我正在使用 Laravel 是一些意想不到的方式。
标签: php mysql laravel laravel-5.8