我很难过这个。我可以搜索一组id,但我想反过来搜索。我的模型包含id" with_ids"属性,并希望搜索类似于mongo db,其中id在ids数组中。 例如
db.conversations.find( { with_ids: { $in: [id] } } )
如何使用Laravel和mysql / Eloquent做到这一点?
$conversations = Conversation::with('messages.user')->where('with_ids', $id)->orWhere('created_by', $id)->get();
它在哪里(' with_ids',$ id)我无法弄清楚......有什么建议吗?
进一步澄清: 我需要找出用户是否参与了其他对话以及他创建的对话。 with_ids是一个json序列化数组f.ex [1,2,23,12]我如何在数组属性中搜索?
答案 0 :(得分:0)
不确定我理解。你试过whereIn()
;
$conversations = Conversation::with('messages.user')
->whereIn('with_ids', [$id])
->orWhere('created_by', $id)
->get();
修改强>
$conversations = Conversation::with('messages.user', function($query) {
$query->where('id', $id); // user_id ?
})
->orWhere('created_by', $id)
->get();
答案 1 :(得分:0)
经过多次挖掘,我终于找到了解决方案。 whereRaw查询中的FIND_IN_SET完成了这一操作。如果其他人遇到这个问题,希望它有所帮助。
它不漂亮,因为某些原因引用需要被删除
Conversation::where('created_by', $id)->orWhereRaw("FIND_IN_SET(?, REPLACE(REPLACE(REPLACE(with_ids, '\"', ''), '[', ''), ']','')) > 0", $id)->get()
这是获取用户创建或参与的聚合对话的最终查询。