使用带有数组(json序列化)属性的{Laravel 5.4查询生成器

时间:2017-03-08 23:47:12

标签: laravel eloquent laravel-query-builder

我很难过这个。我可以搜索一组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]我如何在数组属性中搜索?

2 个答案:

答案 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()

这是获取用户创建或参与的聚合对话的最终查询。