php Laravel Raw Select返回重复值

eyh26e7m  于 2023-08-02  发布在  PHP
关注(0)|答案(1)|浏览(121)

我的模型中有以下测试方法,它获取一行中json列的长度:

public function test(){
    return $this->select(DB::raw('JSON_LENGTH((SELECT comments FROM lab_evals WHERE id='.$this->id.'))'))->get();
    }

字符串
在tinker中,它返回以下内容:

= Illuminate\Database\Eloquent\Collection {#7430
    all: [
      App\Models\LabEval {#7429
        JSON_LENGTH((SELECT comments FROM lab_evals WHERE id =50)): 2,
      },
      App\Models\LabEval {#7431
        JSON_LENGTH((SELECT comments FROM lab_evals WHERE id =50)): 2,
      },
    ],
  }


这不是什么大问题,因为我可以直接调用first(),但我想知道为什么集合中有两个对象而不是一个。
我希望这样:

= Illuminate\Database\Eloquent\Collection {#7430
    all: [
      App\Models\LabEval {#7429
        JSON_LENGTH((SELECT comments FROM lab_evals WHERE id =50)): 2,
      },
    ],
  }


编辑:这是Laravel为某个模型的查询生成的原始SQL。

"select JSON_LENGTH((SELECT comments FROM lab_evals WHERE id=50)) from `lab_evals`"


我得到的结果就有意义了。
这是正确的原始SQL,但仍然不确定如何将其转换为Laravel DB查询构建器。

(SELECT JSON_LENGTH((SELECT comments from lab_evals WHERE id=50)));


编辑二:
我最后只是这样做,标记为已解决:

DB::select('SELECT JSON_LENGTH((SELECT comments from lab_evals WHERE id='.$this->id.'))')

bsxbgnwa

bsxbgnwa1#

把你的where从select中移出来,现在它不应用于整个查询,只应用于你的特定选择。像这样的东西应该可以。

return $this->select(DB::raw('JSON_LENGTH((SELECT comments FROM lab_evals))'))->where('id', $this->id)->get();

字符串

相关问题