首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel Eloquent Advanced拥有

Laravel Eloquent Advanced拥有
EN

Stack Overflow用户
提问于 2015-11-12 18:31:27
回答 1查看 427关注 0票数 1

我对Eloquent有一种相当奇怪的需求。我需要使用雄辩的方式来表示以下查询。这些值直接来自用户输入,所以我不知道如何处理。

代码语言:javascript
复制
SELECT 
    GROUP_CONCAT(Table1.table2ID) AS table2ID,
    GROUP_CONCAT(Table1.table3ID) AS table3ID
FROM
    Table1
HAVING table2ID LIKE '%1%' AND (table3ID LIKE '%123%' OR '%456%')
    AND table2ID LIKE '%2%' AND (table3ID LIKE '%789%' OR '%012%')

注意:这是一个极小的查询版本,以减少混淆,但这是我遇到问题的部分。

$query->having(...)不支持$query->where所支持的闭包方法。

EN

回答 1

Stack Overflow用户

发布于 2015-11-12 18:48:05

如果您的查询对于eloquent来说太复杂,那么可以认为eloquent的要点是做更多的可读性和更容易的代码。没有必要使自己过于复杂,创建一个可以将原始查询添加到模型的作用域,如下所示:

代码语言:javascript
复制
use Illuminate\Database\Eloquent\Model;

class MiModel extends Model
{

    public function scopeHasWhatIneed($query)
    {
        return $query->select(DB::raw("your complex query here"));
    }
}

现在你可以使用你的模型,使用不稳定的代码:

代码语言:javascript
复制
$mi_model->hasWhatIneed()->where(.....)->orderby...

注意,对于原始查询,您需要保护自己不受sql注入的影响。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33669356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档