【问题标题】:Laravel queued event is giving error: Data too long for column 'queue'Laravel 排队事件给出错误:列“队列”的数据太长
【发布时间】: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>

它试图将数据保存在jobsqueue 列中。这是laravel生成的表,queue列的类型是varchar(255)。我被困!为什么 Laravel 本身在容量仅为 255 的情况下尝试处理 queue 表中的长 json 数据?我确信更改数据类型并增加队列列的容量不是这里的解决方案。所以,

我在这里做错了什么?

【问题讨论】:

  • 您需要将列类型从VARCHAR更改为LONGTEXT
  • 不,正如我在问题中所说的那样。我确信这不是解决方案。 Laravel 自己生成表,Laravel 也自己插入值。可能我正在使用 Laravel 是一些意想不到的方式。

标签: php mysql laravel laravel-5.8


【解决方案1】:

jobs表结构必须是idqueuepayloadattemptsreserved_atavailable_at&created_at

在您的插入查询中,payload 列位于末尾。只需修复排序,您就可以开始了。

【讨论】:

  • 这是我的问题。我不是自己手动做的,没有人使用 Laravel 手动插入这些值。为什么 Laravel 会以错误的顺序执行此表,而该表是由自己生成的?我什至无法控制它,我只是触发了广播事​​件,它正在返回这个。
猜你喜欢
  • 2012-07-10
  • 1970-01-01
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-14
  • 1970-01-01
  • 2013-05-29
相关资源
最近更新 更多