Laravel Eloquent在同一查询中得到2个结果

时间:2018-02-19 12:04:09

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

我在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';

1 个答案:

答案 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"));