我在foreach中有以下内容:
$query = SomeFeature::where('feature', $featureName)
->orderBy('due_at')
;
然后在一些条件后我添加或删除查询,最后我有这个:
$query->join('user_features', 'users.id', '=', 'user_features.user_id');
$query->join('user_types', 'user_features.type_id', '=', 'user_types.id');
这是好的,现在我想得到这个:
->where('group', 'group1')->where('name', 'name1')
->where('group', 'group2')->where('name', 'name2')
然后最后我有:
$query->get(['user_features.*', 'users.name', 'user_feature.val']);
基本上,如果我只使用其中一个,如:
->where('group', 'group1')->where('name', 'name1')
或
->where('group', 'group2')->where('name', 'name2')
然后它有效但我希望两个结果都有,并且在get()
get(['user_feature.val1', 'user_feature.val2'])
中也有不同的名称 if($featureName == self::FEATURE_DEFAULT) {
$query->join('user_features', 'users.id', '=', 'user_features.user_id');
$query->join('user_types', 'user_features.type_id', '=', 'user_types.id')
->where('group', 'group1')->where('name', 'name1')
->where('group', 'group2')->where('name', 'name2')
;
}
我怎样才能做到这一点?
感谢。
编辑:不是完整的代码片段,而是更好的结构化代码:
export const host = 'localhost:8080';
export const foo = 'bar';
答案 0 :(得分:0)
我想我明白你要做什么,我相信这个问题是因为你正在做WHERE group = 'group1' AND group = 'group2'
因为显而易见的原因而发生冲突。
尝试这样的事情
if($featureName == self::FEATURE_DEFAULT) {
$query->join('user_features', 'users.id', '=', 'user_features.user_id');
$query->join('user_types', 'user_features.type_id', '=', 'user_types.id')
->whereIn('group', ['group1', 'group2'])
->whereIn('name', ['name1', 'name2']);
}
这会将您的查询更改为WHERE group IN ('group1', 'group2')
,但不会发生冲突,您也可以尝试orWhere()
。
修改强>: 如果您尝试从另一个表/记录中检索特定值并将其作为列插入所选行,您可以在查询构建器中尝试这样的操作,它会执行子查询并将结果写为" group1& #34;和" group2"列 - 调整它以匹配您的MySQL表。
$query->select(DB::raw("(SELECT group FROM groups WHERE group = 'name1') as group1"));
$query->select(DB::raw("(SELECT group FROM groups WHERE group = 'name2') as group2"));