gpt4 book ai didi

laravel - HasManyThrough 具有多态和多对多关系

转载 作者:行者123 更新时间:2023-12-02 05:42:45 24 4
gpt4 key购买 nike

在我的 Laravel 应用程序中,我有以下类:

class Product extends Model
{
public function extended()
{
return $this->morphTo();
}

public function users {
return $this->belongsToMany('App\User', 'products_users', 'product_id');
}
}

class Foo extends Model
{
public function product()
{
return $this->morphOne('App\Product', 'extended');
}
public function bars()
{
return $this->hasMany('App\Bar');
}
}

class Bar extends Model
{
public function product()
{
return $this->morphOne('App\Product', 'extended');
}

public function foo()
{
return $this->belongsTo('App\Foo');
}
}

class User extends Model
{
public function products()
{
return $this->belongsToMany('App\Product', 'products_users', 'user_id');
}
}

我可以使用 Bar::find(1)->product->users 轻松获取 bar 对象的用户,还可以使用 User::获取用户的 bar查找(1)->产品

如何获取属于特定 foo 的所有酒吧的用户?也就是说,Foo::find(1)->users 应该返回所有拥有属于 Foo、id 为 1 的酒吧的用户。基本上是 hasManyThrough具有多态和多对多关系。

最佳答案

尝试这样的事情:

public function users()
{
$Foo = static::with(['bars', 'bars.products', 'bars.product.users'])->get();
return collect(array_flatten(array_pluck($Foo, 'bars.*.product.users')));
}

这个应该适合您(代码已经过测试,但未针对与您的设置完全相同的结构)。第一行将返回通过关系深层嵌套的所有用户。第二行将拉出用户,将其展平为数组,然后将数组转换为集合。

关于laravel - HasManyThrough 具有多态和多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36630884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com