我搜索了Laravel文档并进行了堆栈,以查看是否提到了此内容,而没有其他提及。
有没有一种方法可以配置Laravel应用程序以禁止显示数据库警告消息(如附件)?
此特定错误表明spatie / laravel-activitylog应用正在记录被截断的更改。有问题的“属性”字段的类型为:TEXT。
在初始事务(编辑本身)周围进行尝试/捕获不会捕获错误消息。
有想法吗?
如果有任何特定的代码片段会有所帮助,请告诉我,我将对此文章进行更新。
答案 0 :(得分:0)
很遗憾,我对这个软件包不熟悉。但是,对他们的Github进行的快速扫描告诉我,它看起来像可以在配置中设置的模型,用于将这些数据存储到数据库中。
建议特别使用Eloquent events,saving
,因为这将在creating
和updating
时触发。
在此事件的回调函数中,您可以截断模型的特定属性。在这种情况下,如果我没有记错的话,那将是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
或更大。