我搜索了 Laravel 文档和堆栈以查看是否提到了这一点,但没有发现其他提及。
有没有办法配置 Laravel 应用程序来禁止显示附件等数据库警告消息?
此特定错误表明 spatie/laravel-activitylog 应用程序正在记录被截断的更改。有问题的“属性”字段的类型为:TEXT。
在初始事务(编辑本身)周围放置一个 try/catch 不会捕获错误消息。
想法?
如果任何特定的代码片段有帮助,请告诉我,我会更新这篇文章。
我搜索了 Laravel 文档和堆栈以查看是否提到了这一点,但没有发现其他提及。
有没有办法配置 Laravel 应用程序来禁止显示附件等数据库警告消息?
此特定错误表明 spatie/laravel-activitylog 应用程序正在记录被截断的更改。有问题的“属性”字段的类型为:TEXT。
在初始事务(编辑本身)周围放置一个 try/catch 不会捕获错误消息。
想法?
如果任何特定的代码片段有帮助,请告诉我,我会更新这篇文章。
不幸的是我不熟悉这个包。然而,在他们的Github上的快速扫描告诉我,它看起来是一个可以在配置中设置的模型,用于将这些数据存储到数据库中。
一个建议是使用Eloquent 事件,saving
特别是因为这将在creating
和时触发updating
。
在此事件的回调函数中,您可以截断模型的特定属性。properties
在这种情况下,如果我没记错的话,那将是属性。
看起来您正在尝试存储一些 base64 字符串,并且猜测是这会导致问题。也许properties
您可以src="somereallylongbase64"
对.src="...base64..."
properties
那不是警告吗?这是一个例外,因为您的插入语句试图在“属性”列中插入大量数据。
您可能不想抑制这种类型的消息(并且可能无法抑制潜在的错误),您需要通过使列适合更多数据或使用其他一些保存机制来修复它(如果您有很多数据)保存。
spatie/laravel-activitylog
使用您的模型$fillable
属性来了解要记录哪些属性并将它们记录在表的properties
列下activity_log
。
检测 MySQL 中将被截断的属性并将其包含到$logAttributesToIgnore
模型中的属性中:
public static $logAttributesToIgnore = [];
如果您坚持要记录该属性,您应该创建一个迁移并将properties
列从TEXT
toMEDIUMTEXT
或更大。
嘿,很抱歉聚会迟到了。要抑制截断警告,只需将其放入 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 示例类似。