【问题标题】:How to pass a part of Laravel Eloquent query to method如何将 Laravel Eloquent 查询的一部分传递给方法
【发布时间】:2022-01-10 12:46:48
【问题描述】:

我想在一个方法中使用不同的查询,并且我想在其中传递一部分查询

我的方法是这样的:

static function methodName($partOfQuery)
{
   ModelName::where('...')->$partOfQuery->...;
}

我想做类似的事情:

$partOfQuery = where('columnName', '>=', 5)->whereRaw('Other Condition');
self::methodName($partOfQuery);

但我遇到了这个错误: Call to undefined function App\Classes\ClassName\where()

有人可以帮我解决这个问题吗?谢谢

【问题讨论】:

标签: php sql laravel eloquent


【解决方案1】:

我认为这个错误是因为 where 在没有 eloquent 模型类的情况下被调用。

您可以使用查询构建器做的事情是在您的 where 条件中调用一个函数,例如:

SomeModel::where(function($query){
// do something
$query->where(...)
})

【讨论】:

    【解决方案2】:

    我怀疑没有什么和你描述的完全一样。但是还有其他选择,如果我理解正确,您正在尝试链接多个方法。

    如果是这样,您可以执行以下操作:

    在您的模型类中:

    static function getActiveBooks()
    {
        return self::where('status', 'active');
    }
    public function getFeaturedBooks() {
        return $this->getActiveBooks()->where('featured', 'active');
    }
    

    用法:

    $activeBooks = (new Book())->getFeaturedBooks()->get();
    

    有多种方式,你也可以像评论部分中描述的@levi一样使用范围,它们是同一枚硬币的2面。

    【讨论】:

    • @huy-pham 谢谢,现在我正在做类似你的回答的事情。但是我有很多方法,所有这些方法都将参数发送到最终方法。我只想传递一个查询而不是模型的对象。顺便说一句,谢谢。
    猜你喜欢
    • 2018-09-13
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 2019-02-14
    • 2021-12-30
    相关资源
    最近更新 更多