如何在 laravel 中编写此查询?有啥建议么?
Posted
技术标签:
【中文标题】如何在 laravel 中编写此查询?有啥建议么?【英文标题】:How to write this query in laravel? Any Suggestions?如何在 laravel 中编写此查询?有什么建议么? 【发布时间】:2020-03-10 13:44:32 【问题描述】:这是在 MY SQL 中运行良好的查询:
SELECT users.name FROM ((event_user INNER JOIN events ON event_user.event_id = events.id) INNER JOIN users ON event_user.user_id = users.id) where events.name like '%FEB%' or users.name like '%FEB%' or users.email like '%FEB%' or users.phone 比如'%FEB%'
这是我写的,当然行不通:
$data['search_data'] = EventUser::select('users.*')
->join
('users', 'event_user.user_id', '=', 'users.id')
->join
('events', 'event_user.event_id', '=', 'events.id')
->where
('events.name','like', "'$search'")
->orWhere
("users.id",'like', "'$search'")
->orWhere
("users.name",'like', "'$search'")
->orWhere
("users.phone",'like', "'$search'")
->orWhere
("users.email",'like', "'$search'")
->orWhere
("users.password",'like', "'$search'")
->orWhere
("users.work_location",'like', "'$search'")
->orWhere
("users.profession",'like', "'$search'")
->orWhere
("users.designation",'like', "'$search'")
->orWhere
("users.committee",'like', "'$search'")
->orWhere
("users.role",'like', "'$search'")
->orWhere
("users.bio",'like', "'$search'")
->paginate(10);
好的,在大家的帮助下。 我有解决办法。谢谢大家。
$data['search_data'] = EventUser::select('users.*', 'events.name as e_name')
->join('users', 'event_user.user_id', '=', 'users.id')
->join('events', 'event_user.event_id', '=', 'events.id')
->where('events.name', 'like', '%'.$search.'%')
->orWhere('users.id', 'like', '%'.$search.'%')
->orWhere('users.name', 'like', '%'.$search.'%')
->orWhere('users.phone', 'like', '%'.$search.'%')
->orWhere('users.email', 'like', '%'.$search.'%')
->orWhere('users.password', 'like', '%'.$search.'%')
->orWhere('users.work_location', 'like', '%'.$search.'%')
->orWhere('users.profession', 'like', '%'.$search.'%')
->orWhere('users.designation', 'like', '%'.$search.'%')
->orWhere('users.committee', 'like', '%'.$search.'%')
->orWhere('users.role', 'like', '%'.$search.'%')
->orWhere('users.bio', 'like', '%'.$search.'%')
->distinct()
->paginate(10);
但这仍然返回重复的结果。
【问题讨论】:
不要双引号你的变量。它会将这些引号添加到您正在搜索的字符串中。 什么不起作用?您是否收到错误消息或只是不是您预期的输出?like
未正确使用,但在您提到的答案中,在指向 like
的正确语法后仍然无法正常工作,因此尚不清楚出了什么问题。
它没有返回任何结果。因为 SQL 查询在 MY SQL 中返回结果
【参考方案1】:
你需要像这样连接$search
和%
:
->where('events.name','like', '%'.$search.'%')
【讨论】:
它没有返回任何结果。因为 SQL 查询在 MY SQL 中返回结果 @Ehtasham 你能发布一些mysql将返回的结果吗? @Ehtasham 看起来不错。确保 EventUser 是表 event_user 的模型。可以用->toSql()
代替->paginate(10)
,在mysql中查看原始sql。
谢谢@TsaiKoga,这很有帮助。但即使是这个也返回重复的结果。
@Ehtasham distinct()
将影响您选择的每一列,重复结果的列是否都相同?【参考方案2】:
嗯,这是一个很长的查询,我想你可以测试一下:
$data['search_data'] = EventUser::select('users.*')
->join('users', 'event_user.user_id', '=', 'users.id')
->join('events', 'event_user.event_id', '=', 'events.id')
->where('events.name', 'like', '%'.$search.'%')
->where(function ($query) use ($search)
$query->where('title', 'LIKE', '%'.$search.'%')
->orWhere('users.id', 'LIKE', '%'.$search.'%')
->orWhere('users.name', 'LIKE', '%'.$search.'%')
->orWhere('users.phone', 'LIKE', '%'.$search.'%')
->orWhere('users.email', 'LIKE', '%'.$search.'%')
->orWhere('users.password', 'LIKE', '%'.$search.'%')
->orWhere('users.work_location', 'LIKE', '%'.$search.'%')
->orWhere('users.profession', 'LIKE', '%'.$search.'%')
->orWhere('users.designation', 'LIKE', '%'.$search.'%')
->orWhere('users.committee', 'LIKE', '%'.$search.'%')
->orWhere('users.role', 'LIKE', '%'.$search.'%')
->orWhere('users.bio', 'LIKE', '%'.$search.'%')
)
->paginate(10);
希望对您有所帮助。让我们知道它是否有效!
【讨论】:
还是一样不返回任何结果 你好@Ehtasham,您是否更改了变量以适应您的项目?代替->paginate(10);
,替换为->get();
并将查询插入dd();
并检查结果。
无连接查询工作正常。我得到的是错误在于加入。以上是关于如何在 laravel 中编写此查询?有啥建议么?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Laravel 5.1 中编写这个(左连接、子查询)?