gpt4 book ai didi

mysql - 十月 cms - Eloquent - 从 sql 查询创建模型查询的问题

转载 作者:行者123 更新时间:2023-11-29 19:12:03 27 4
gpt4 key购买 nike

我有一个运行正常的 sql 查询

SELECT 
*
FROM
jml_gkb_eventos
WHERE
id IN (SELECT
evento_id
FROM
jml_gkb_etiqueta_evento
WHERE
etiqueta_id IN (SELECT
id
FROM
jml_gkb_etiquetas
WHERE
etiqueta REGEXP ? ) group by evento_id having count(evento_id) = ?);

但我不知道如何将此 sql 查询转换为 Eloquent 模型查询。我知道我已经接近解决方案(与此问题相关 here )并尝试了以下代码的一些变体:

        $pesquisa = preg_split('/\s+/', $temp, -1, PREG_SPLIT_NO_EMPTY);
$cadeiapesquisa = implode('|', $pesquisa);
$contagem = count($pesquisa);
if (Session::get('modo') == 0){
if ( strlen($cadeiapesquisa) > 0 ){
$this['records'] = Evento::with('etiquetas')->whereHas('etiquetas', function($query) use ($cadeiapesquisa, $contagem){

$query->where('etiqueta', 'regexp', "$cadeiapesquisa")->groupBy('evento_id')->having('COUNT(evento_id) = '.$contagem);

})->orderBy('id', 'DESC')->paginate(25);
} else {
$this['records'] =Evento::paginate(25);
}
}

我让它在内部查询中没有 ->having() 部分的情况下工作,显然没有预期的返回,但没有错误。

我做错了什么?

TIA

JL

[编辑] - 使用上面的代码我收到以下错误:

Eloquent sql error

最佳答案

我发现了问题。这是因为 'count()' 部分没有被 eloquent 处理。将计数放在 DB::raw 上至少在我所做的测试中按预期工作。经过一些调整的整个代码片段是:

        $pesquisa = preg_split('/\s+/', $temp, -1, PREG_SPLIT_NO_EMPTY);
$cadeiapesquisa = implode('|', $pesquisa);
$contagem = count($pesquisa);
if (Session::get('modo') == 0){
if ( strlen($cadeiapesquisa) > 0 ){
$this['records'] = Evento::with('etiquetas')->whereHas('etiquetas', function($query) use ($cadeiapesquisa, $contagem){

$query->where('etiqueta', 'regexp', "$cadeiapesquisa")->groupBy('evento_id')->having(DB::raw("COUNT('etiqueta_id')"), '>=', $contagem );

})->paginate(25);
} else {
$this['records'] = Evento::paginate(25);
}
}

JL

关于mysql - 十月 cms - Eloquent - 从 sql 查询创建模型查询的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43007491/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com