首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用indexQuery在Nova Laravel中显示二级关系元素

问用indexQuery在Nova Laravel中显示二级关系元素
EN

Stack Overflow用户
提问于 2020-01-08 18:10:23
回答 1查看 401关注 0票数 0

我有三个模特

用户与域有许多关系(域()),与邮箱的hasmany关系(邮箱)

User.php

代码语言:javascript
复制
public function domains()
{
    return $this->hasMany(Domain::class);
}

Domain.php

代码语言:javascript
复制
public function user()
{
    return $this->belongsTo(User::class);
}

public function mailboxes()
{
    return $this->hasMany(Mailbox::class, 'domain', 'domain');
}

Mailbox.php

代码语言:javascript
复制
public function domains()
{
    return $this->belongsTo('App\Domain', 'domain', 'domain');
}

下面的代码可以正常工作,因为只拥有邮箱,但如果放入策略,则不起作用。

代码语言:javascript
复制
public function view(User $user, Mailbox $mailbox)
{
    $domains = Domain::where('user_id', $user->id)->pluck('domain')->toArray();

    return User::with([
        'domains.mailboxes' => function ($builder) use ($domains) {
            $builder->where('domain',$domains);
        }
    ])->find($user);

}

我试着在我的Nova/Mailbox模型上给indexQuery做过皮,但没有起作用。重新运行数据库中的所有邮箱

代码语言:javascript
复制
public static function indexQuery(NovaRequest $request, $query)
{

    $domains = Domain::where('user_id', $request->user()->id)->pluck('domain')->toArray();

    return User::with([
        'domains.mailboxes' => function ($builder) use ($domains) {
            $builder->where('domain',$domains);
        }
    ])->find($user);

    if ($request->user()->is_super_admin) {
        return $query;
    } else {
        return User::with([
            'domains.mailboxes' => function ($builder) use ($domains) {
                $builder->where('domain',$domains);
            }
        ])->find($user);
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-02-15 16:41:15

我会在用户和邮箱之间添加一个hasManyThrough (文档)关系,这样您就可以直接从用户模型中提取邮箱:

代码语言:javascript
复制
# Inside User model class
public function mailboxes()
{
    return $this->hasManyThrough(Mailbox::class, Domain::class, 'user_id', 'domain', 'id', 'domain');
}

然后在您的indexQuery中,您可以返回用户及其所有邮箱:

代码语言:javascript
复制
public static function indexQuery(NovaRequest $request, $query)
{
    return $query->when(! $request->user()->is_super_admin, function ($builder) use ($request) {
        // Or use the request() method helper instead of use
        return $request->user()->with('mailboxes');
    });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59651574

复制
相关文章

相似问题

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