laravel 如何使用现有范围方法将关系加载到检索到的模型

8tntrjer  于 2023-01-21  发布在  其他
关注(0)|答案(1)|浏览(112)

假设我有一个$profile变量,如下所示:

$profile = request()->user()->profile;

稍后,我想通过使用load()方法加载它所具有的一些关系,该方法可以使用以下命令执行:

$profile->load('foo', 'bar', 'bar.logs');

我知道上面的事情,但是,我碰巧在Profile模型中有一个作用域,它的内容与上面的代码相同,如下所示:

class Profile extends Model
{
    // ....
    public function scopeWithFooBar($query)
    {
        return $query->with('foo', 'bar', 'bar.logs');
    }
}

现在,我的问题是,我是否可以使用withFooBar scope方法将关系加载到$profile变量中,这样我就不必两次编写相同的内容了?
请注意,我知道如何使用作用域方法。但请分享你的想法。谢谢你!

s3fp2yjn

s3fp2yjn1#

是的,你可以使用withFooBar scope方法来加载$profile变量的关系,而不是使用load()方法。下面是一个例子来说明你是如何做到这一点的:

$profile = request()->user()->profile()->withFooBar()->first();

这将在Profile模型上执行withFooBar scope方法,并返回查询的第一个结果,该结果将加载关系foobarbar.logs,就像您使用load()方法一样。

相关问题