【问题标题】:How to pass array in where condition? Laravel 5.3如何在 where 条件下传递数组?拉拉维尔 5.3
【发布时间】:2017-03-15 14:59:35
【问题描述】:

如果我有这样的数据

比如我的表是国家表

第一个数据:

id = 1;名字=英格兰; deleted_by = 1, 3

第二个数据:

id = 2;名称=西班牙; deleted_by = 2, 4

我尝试这样:

Country::whereIn('deleted_by', $user_id)->get(); 

但是我的case好像不能用whereIn

例如,我想显示数据有一个 user_id = 1

我该怎么做?

注意:

deleted_by = 用户id删除的数据

$user_id = 正在记录的用户 ID

【问题讨论】:

  • 尝试将where() 条件更改为find() 仅在查找中添加id
  • 澄清一下,您的deleted_by 列可以包含多个用逗号分隔的ID??
  • @Ross Wilson,不,它只有两个 id
  • 如果它只有 2 个 ID(严格),那么您可以有一个 deleted_by_onedeleted_by_two 列,而不是将它们混合在一起。
  • 记住,第一范式要求基表的每一行列交集是原子的(相对于上下文),所以如果你有一个包含用户标识符的列,那么每一行都需要在该列中存储一个用户标识符。

标签: php mysql laravel laravel-5.3 laravel-eloquent


【解决方案1】:

这不是它的工作原理。你可以这样做:

Country::where('deleted_by', 'like', ','.$user_id.',')->get();

并将数据存储为,2,4,

但更好的方法是将用户 ID 保存在单独的数据透视表中并使用 many-to-many relationship

【讨论】:

  • 我修改为:Country::where('deleted_by', 'like', '%'.$user_id.'%')
  • @samueltoh 这不起作用,因为如果用户 ID 为 1,它还将获取 ID 为 1261212 等的用户的数据。
  • 好的。谢谢。但我需要使用not like。见这里:stackoverflow.com/questions/42814099/…。也许你可以帮助我
  • @samueltoh 做同样的事情,但使用'not like' 而不是'like'
  • 没问题。感谢您的帮助
猜你喜欢
  • 2017-07-16
  • 1970-01-01
  • 2017-02-03
  • 2017-11-12
  • 2017-06-16
  • 1970-01-01
  • 2018-05-11
  • 1970-01-01
  • 2017-11-02
相关资源
最近更新 更多