Laravel 5.5-如何抑制MySQL数据库截断警告消息

时间:2019-03-11 21:44:25

标签: php mysql laravel spatie activitylog

我搜索了Laravel文档并进行了堆栈,以查看是否提到了此内容,而没有其他提及。

有没有一种方法可以配置Laravel应用程序以禁止显示数据库警告消息(如附件)?

此特定错误表明spatie / laravel-activitylog应用正在记录被截断的更改。有问题的“属性”字段的类型为:TEXT。

error message

在初始事务(编辑本身)周围进行尝试/捕获不会捕获错误消息。

有想法吗?

如果有任何特定的代码片段会有所帮助,请告诉我,我将对此文章进行更新。

4 个答案:

答案 0 :(得分:0)

很遗憾,我对这个软件包不熟悉。但是,对他们的Github进行的快速扫描告诉我,它看起来像可以在配置中设置的模型,用于将这些数据存储到数据库中。

建议特别使用Eloquent eventssaving,因为这将在creatingupdating时触发。

在此事件的回调函数中,您可以截断模型的特定属性。在这种情况下,如果我没有记错的话,那将是properties属性。

您似乎正在尝试存储一些base64字符串,并且猜测可能是引起此问题的原因。也许您可以对properties的内容进行正则表达式,然后将所有src="somereallylongbase64"替换为src="...base64...",以防止数据中的重要部分丢失,而只需使用简单的全局变量{{1} }。

答案 1 :(得分:0)

那不是警告吗?这是一个例外,因为您的插入语句试图在“属性”列中插入很多数据。

您可能不想抑制这种类型的消息(并且可能无法抑制潜在的错误),您需要通过使列适合更多数据的方式来进行修复,或者使用很多其他的保存机制来进行修复您要保存的数据。

答案 2 :(得分:0)

嘿,很抱歉迟到了。要抑制截断警告,只需将其放入 CAST。

示例:

-- With decimal(4, 1) (too many decimal places throws a warning but doesn't throw an
-- exception unlike having too high a number would):
INSERT INTO sysmon.temperatures VALUE (NOW(), CAST(46594/1000 AS DECIMAL(4,1)), 36.5);
-- Mysql: Process run is green!

-- With VARCHAR(400) (when too many characters throws a warning before truncating):
INSERT INTO website.blog_comments VALUE (NOW(), CAST('some really long string' AS VARCHAR(400)));
-- Mysql: You're the boss!

TEXT 的工作方式与上面的 VARCHAR 示例类似。

答案 3 :(得分:0)

spatie/laravel-activitylog 使用您的模型 $fillable 属性来了解要记录哪些属性并将它们记录在 properties 表的 activity_log 列下。

检测 MySQL 中将要截断的属性并将其包含到模型的 $logAttributesToIgnore 属性中:

public static $logAttributesToIgnore = [];

如果您坚持要记录该属性,则应创建迁移并将 properties 列从 TEXT 更改为 MEDIUMTEXT 或更大。