【问题标题】:Laravel eloquent find in array from sqlLaravel 雄辩地从 sql 中查找数组
【发布时间】:2015-01-20 21:21:17
【问题描述】:

我正在使用 Laravel 4.2 开发一个网站。我有两个表格:articlestags

这是我的标签表:

id | article_ids | xxxx
2  | 2,41,23,6   | xxxx

我正在使用 Eloquent,我想在 article_ids 列中找到一个特定的 id。 我怎样才能做到这一点?

我可以这样在 MySQL 中搜索吗?

感谢您的帮助。对不起我的英语不好。

【问题讨论】:

  • 糟糕的表格设计,每个 article_id 一个 id 的表格很有意义
  • 是的,但我想为其他项目学习这个。这对我很重要。

标签: php mysql sql laravel eloquent


【解决方案1】:

几乎所有的事情都已经说过了——糟糕的设计,你应该避免它等等等等。这是真的,我同意。

以正确的方式做事。然而,下面是它在 MySQL 中的实现方式:

// say you want tags related to articles 2 and 23

SELECT * FROM tags
WHERE FIND_IN_SET('2', article_ids)
AND FIND_IN_SET('23', article_ids);

// Eloquent
Tag::whereRaw(
   'find_in_set(?, article_ids) and find_in_set(?, article_ids)',
   [$id1, $id2] // bindings array
)->get();

【讨论】:

  • 谢谢回答,我会以正确的方式做标签。我只需要学习这个。查询是真的,但我怎么能用 laravel 做到这一点。
【解决方案2】:

正如您刚刚发现的那样,这是一种将标签与文章关联起来的非常糟糕的方式,因为它不容易被查询。相反,对于两者之间的多对多关系,您需要一个包含article_idtag_id 列的中间表。对于具有四个标签的文章,将有四个记录,每个关联一个。

【讨论】:

  • 好吧,这对标签来说太糟糕了。所以,我还有另一个项目。我正在尝试 message_groups 和消息。我想将 users_id 保存在 message_groups 的用户列中。并找到message_group 中的人。你知道最好的方法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-11
  • 2018-01-26
  • 2021-07-23
  • 1970-01-01
  • 2014-07-27
相关资源
最近更新 更多