【问题标题】:Can't return a simple many-to-many relationship value无法返回简单的多对多关系值
【发布时间】:2014-09-22 07:37:27
【问题描述】:

首先感谢您对我的主题感兴趣。我觉得这个问题很简单。

我在 Laravel 中创建了一个多对多关系。我的'users' 表代表可以登录我的系统的用户我的“模块”表表示用户登录后可以访问的模块。所以,我想验证当前登录的用户是否有权访问请求的模块

例如,用户尝试访问 URL:laravel.com/blog/insert 但是用户没有这个模块的权限,所以系统验证关系并返回用户是否可以继续在这个页面。我认为这个验证可以在控制器的 __construct 方法中完成。

我的表:“users”、“modules”和“users_modules”

我在我的“模块”模型上尝试过类似的方法,但没有成功。 $id 代表模块 ID:

public static function getUser($id)
{
    $module = Modules::where('id', '=', $id)->first();

    return $module->users;
}

我的用户模型关系:

public function modules()
{
    return $this->belongsToMany('Modules', 'users_modules', 'user_id', 'module_id');
}

和我的模块关系:

public function users()
{
    return $this->belongsToMany('User', 'users_modules', 'module_id', 'user_id');
}

我该怎么做?感谢所有帮助我的人! :)

【问题讨论】:

  • 你不需要那个静态方法。无论如何,它看起来没问题,那么问题是什么?具体一点,no success 什么也没说。
  • 好的,当我在 index.blade.php 文件中调用静态方法时,会发生以下错误:未定义属性:Illuminate\Database\Eloquent\Collection::$firstname(查看: /home/pedroroccon/app/views/admin/dashboard/index.blade.php)。我这样称呼我的代码:Modules::getUser(1)->firstname。名字是我的“用户”表中的一个字段。
  • 这是因为您返回了模型集合(因为它有许多相关模型),并且您正在尝试获取模型的属性。

标签: php laravel many-to-many eloquent relationship


【解决方案1】:

使用 Entrust for Laravel 解决了这个问题。感谢所有帮助过我的人!

委托链接:

https://github.com/Zizaco/entrust

【讨论】:

    【解决方案2】:

    这样做的方法是在app/filters.php 中创建一个自定义路由过滤器,检查用户是否是相关模块的成员。

    查看文档here,尤其是有关指定过滤器参数的部分,这应该会让您朝着正确的方向前进。

    【讨论】:

    • 我不明白你的逻辑,但我的问题是如何验证登录的用户是否属于当前模块?检查用户是否属于该模块时遇到问题。
    猜你喜欢
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 2018-06-11
    • 2014-10-03
    相关资源
    最近更新 更多