【问题标题】:Laravel Accessing One To Many polymorphic objectsLaravel 访问一对多多态对象
【发布时间】:2016-01-07 09:12:10
【问题描述】:

我有这张桌子:

user_permissions
----------------
id
user_id
permissable_id
permissable_type

permissable_type 可以是任何东西。这就是我控制某些能力的权限的方式。可能的 permissable_types 之一是 App\Models\Product。如果用户只能使用 5 个产品中的 2 个,则 user_permissions 表中将有 2 行。获得这 2 个权限的最佳方法是什么?
我有return $this->hasMany('UserPermission'); 这让我得到了 2 个 userPermission 对象,但我想得到一个 Products 而不是 UserPermissions 的集合。最好的方法是什么?

我在 Laravel 5.0

【问题讨论】:

    标签: php laravel laravel-5 eloquent polymorphic-associations


    【解决方案1】:

    您的 user_permissions 表的设置类似于 polymorphic relationship。这些字段已经正确命名,所有内容。如果你有这种关系设置,这应该很容易。

    听起来您正在为特定用户寻找一组产品。以这种方式表达它可以让您获得所需的代码:

    // "I want Products that have a specific user"
    $products = \App\Models\Product::whereHas('permissions.user', function($q) use ($user) {
        $q->where('id', $user->id);
    });
    

    如果您的关系尚未建立,这是他们的样子:

    class UserPermission {
        public function user() {
            return $this->belongsTo(User::class);
        }
    
        public function permissable() {
            return $this->morphTo();
        }
    }
    
    class Product {
        public function permissions() {
            return $this->morphMany(UserPermission::class, 'permissable');
        }
    }
    

    【讨论】:

    • 是的,我已经完成了所有设置。我喜欢你的代码来获取产品。我是从用户那里来的,但从产品那里来是有意义的。
    猜你喜欢
    • 2012-04-30
    • 2015-09-14
    • 2016-01-26
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多