我有三个模特
用户与域有许多关系(域()),与邮箱的hasmany关系(邮箱)
User.php
public function domains()
{
return $this->hasMany(Domain::class);
}Domain.php
public function user()
{
return $this->belongsTo(User::class);
}
public function mailboxes()
{
return $this->hasMany(Mailbox::class, 'domain', 'domain');
}Mailbox.php
public function domains()
{
return $this->belongsTo('App\Domain', 'domain', 'domain');
}下面的代码可以正常工作,因为只拥有邮箱,但如果放入策略,则不起作用。
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做过皮,但没有起作用。重新运行数据库中的所有邮箱
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);
}
}发布于 2020-02-15 16:41:15
我会在用户和邮箱之间添加一个hasManyThrough (文档)关系,这样您就可以直接从用户模型中提取邮箱:
# Inside User model class
public function mailboxes()
{
return $this->hasManyThrough(Mailbox::class, Domain::class, 'user_id', 'domain', 'id', 'domain');
}然后在您的indexQuery中,您可以返回用户及其所有邮箱:
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');
});
}https://stackoverflow.com/questions/59651574
复制相似问题