0

我只需要显示模型中附加到某些组的那些记录。(“belongsToMany”关系)。(电影模型插件列表的后端页面)我想获取当前用户的组并创建一个查询。

我的意思是说:

我使用关系字段将记录附加到组。

IE:

  • 我有表“elisseii_myplugin_movies”。
  • 在“电影”模型中,我创建了一个名为“组”的关系字段。
  • 并创建了表“elisseii_myplugin_movies_groups”。
  • 在“电影”模型中使用了 $belongsToMany。

    public $belongsToMany =[ 
    
        'groups' =>[ 
            'Elisseiidev\MyPlugin\Models\Groups', 
            'table' => 'elisseii_myplugin_movies_groups', 
            'order' => 'name'
        ]
    
    ];
    
  • 插件中的“Groups”模型使用标准表“backend_user_groups”。

现在记录有关于附加到它们的组的信息。您可以查看视频教程,其中说明了它)

我需要用户不能编辑不属于他们的组的记录。代码必须是动态的。

我需要一个详细的答案,因为我正在学习))提前感谢您的时间。

4

1 回答 1

0

您需要将此方法添加到使用列表行为的控制器中,以显示列表。

public function listExtendQuery($query) {
    $user = \BackendAuth::getUser();
    $codes = $user->groups->pluck('code')->toArray();
    $query->whereHas('groups', function ($q) use ($codes){
        $q->whereIn('groups.code', $codes);
    });
}

listExtendQuery方法将使用我们为用户显示的列表的自定义条件扩展查询。

在这里我们获取 Be user 然后我们提取code它,因为它将是数组,用户可以有多个组。

现在你的Movies表有groups关系,所以它可以有多个组,所以现在我们可以检查该电影组代码是否在用户中可用,然后我们可以向他显示列表项。

感染你不需要创建新模型(Elisseiidev\MyPlugin\Models\Groups)如果你不需要额外的功能,你可以直接使用内置模型。

你可以简单地做

public $belongsToMany = [
    'groups' => [
         Backend\Models\UserGroup::class, 
        'table' => 'elisseii_myplugin_movies_groups',
        'order' => 'name'
    ]
];

让我知道它是否有效。

于 2017-12-19T15:28:33.623 回答