在不使用 explode 的情况下比较以逗号分隔的字符串中的数据

Compare data within a string separated by comma without using explode

有什么方法可以比较 deleted_by_id 中是否存在用户 ID,而无需通过 explode 函数直接使用 eloquent?我正在使用 laravel 4.2 顺便说一句。下面是一个示例 table:

messages    
+-----------------------------+------------------+
+ id | message                + deleted_by_id    +
+-----------------------------+------------------+
+  1 | hello                  + 65,72            +
+  2 | thank you              + 54,33,89         +
+-----------------------------+------------------+

我正在尝试比较 deleted_by_id 中是否存在用户 ID,以便消息显示在垃圾箱视图中。

您可以使用带有 LIKE 运算符的 SELECT 语句作为一种方法,但是随着用户 ID 值的增长,这会产生意想不到的结果。另一种方法是使用 MySQL

REGEX 特性

MySQL Regex

此外,由于您想使用 Eloquent,您可以尝试使用 Regex 的 whereRaw() 语句...

Message::whereRaw("deleted_by_id REGEX 8{1}9{1}"); //find 89

这是未经测试的,您每次都必须根据您要查找的内容更新正则表达式,但我只能看到 Eloquent.

的选项

最终,您最好的选择是重新考虑您的 table 结构,以便您可以将每个用户 ID 存储在其自己的行中。

MySQL Regex Pattern Matching

没有likeregex,但是find_in_set(我猜是MySQL):

YourModel::whereRaw('find_in_set(?, deleted_by_id)', [$user_id])->get();

显然建议 - 标准化数据库 ;)