【问题标题】:Laravel - is there a way to combine whereHas and withLaravel - 有没有办法结合 whereHas 和 with
【发布时间】:2016-04-15 04:08:28
【问题描述】:

我目前面临一个小问题。仅当存在具有某些条件的关系时,我才想返回模型。使用 whereHas() 方法可以正常工作。

$m = Model
    ::whereHas(
        'programs',
        function($q) {
            $q->active();
        }
    );

但是,将关系称为像这样的属性将给我所有(未过滤的结果)。

$m->programs;

所以基本上我现在正在做的是:

$m = Model
    ::whereHas(
        'programs',
        function($q) {
            $q->active();
        }
    )
    ->with(array('programs' => function($q) {
        $q->active();
    }))
;

这很好,但我对再次做同样的事情感到非常难过。这不可能是正确的方法。如何在不复制代码的情况下实现这一点?

【问题讨论】:

标签: php laravel laravel-4


【解决方案1】:

如果“活动程序”的概念在您的应用程序中很重要,请考虑为活动程序创建一个单独的关系(在这种情况下,我假设您有一个 HasMany 关系):

class Model
{
    public function activePrograms()
    {
        return $this->hasMany(Program::class)->active();
    }
}

然后您可以将查询简化为:

Model::with('activePrograms')->has('activePrograms')->get();

【讨论】:

  • 有趣!您可以添加修改到关系的查询生成器吗?这是不同的类,我不知道它们是否兼容
  • 是的,您可以在关系上链接任何构建器方法。在我看来,这是 Eloquent 最强大的功能之一。
  • 我想了想,然后决定'不,那太酷了' ;)) 感谢您提供的信息
  • 这确实很有趣。谢谢!
猜你喜欢
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 2018-10-20
  • 2019-11-09
  • 2018-12-20
  • 1970-01-01
  • 2011-02-23
  • 2012-03-05
相关资源
最近更新 更多