gpt4 book ai didi

php - 如何在 Laravel Eloquent 中使用带有子查询的内连接

转载 作者:行者123 更新时间:2023-11-29 11:56:18 24 4
gpt4 key购买 nike

注意:这是 laravel 5.3

基本上,当用户选择阿拉伯语翻译时,我正在运行查询。完整的 SQL 如下所示

select s.ref, t.text as ref_ar 
FROM stores AS s
INNER JOIN
(SELECT item, text
FROM translator_translations
WHERE locale ='ar'
AND namespace ='*'
AND item like 'store.ref%'
) AS t
ON substring(s.ref_translation from 14 for 26) = t.item;

在 Laravel 官方文档中没有看到太多关于子查询的文档(有内部联接的东西,但还不够好),而且 SO 建议看起来很奇怪..建议?

上下文

这将用作模型内的范围,因此这可以工作:

public function scopeFilterLanguage($query, $language_id)
{
if (!$language_id || intval($language_id) != LanguageConstants::ARABIC_LANGUAGE_ID) {
return $query;
}
return $query->whereRaw("
substring(ref_translation from 14 for 26) in
(select item
from
translator_translations
where
locale ='ar' and namespace ='*'
and
item like 'store.ref%')");

}

但它没有给我我想要的。 (即我必须在本文开头使用更大的版本)

最佳答案

这有效(忽略像这样的动态东西 ->getClassName 等)..基本逻辑工作得很好

public function scopeAddTranslations($query)
{
$t = new Translation();

$subq = $t->select('item','text as ref_ar')
->where('locale','=','ar')
->where('item','like',$this->getClassName().'.ref%');

$query->leftjoin(\DB::raw('('.$subq->toSql().') as t'),
function ($join) use ($subq) {
$join->on(\DB::raw('SUBSTRING('.$this->getTable().'.ref_translation
FROM 14 FOR 26)'),
'=',
\DB::raw('t.item'))
->addBinding($subq->getBindings());
});
return $query;
}

关于php - 如何在 Laravel Eloquent 中使用带有子查询的内连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48747008/

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