【问题标题】:Laravel | Returning Array In Model Function拉拉维尔 |在模型函数中返回数组
【发布时间】:2021-10-05 04:01:32
【问题描述】:

我有表用户和角色的权限。每个用户可以有 2 个或更多角色。目前我在需要访问用户角色时使用 foreach。我需要的是,当我登录时,我想要创建返回角色用户登录的数组数据的函数。 这是我的来源。

Users.php(模型)

<?php
namespace App\Models;
.
.
.
class User extends Authenticatable implements MustVerifyEmail
{
use HasFactory, Notifiable;

.
.
.

public function roles()
{
    return $this->hasMany(RoleUserModel::class, 'id_user');
}

public function roles_array()
{
    $roleUser = [];
    foreach($this->roles() as $role){
        $roleUser[] = $role->id_role;
    }
    return collect($roleUser);
}

.
.
.
}

sidebar.blade.php(视图)

<?php

$roleUser = [];
foreach(Auth::user()->roles as $role){
    $roleUser[] = $role->id_role;
}
$idMenu = App\Models\Sistem\RoleMenuModel::whereIn('id_role', $roleUser)->pluck('id_menu')->toArray();

?>

@foreach(App\Models\Sistem\MenuModel::where('parent_id', 0)->whereIn('id', $idMenu)->get() as $menu)
<li class="nav-item">
   <a href="{{ $menu->url }}" class="nav-link">
      <i class="nav-icon {{ $menu->icon }}"></i>
         <p>
            {{ $menu->deskripsi }}
         </p>
    </a>
    @if(count($menu->avMenuChilds))
        @include('_partials.menuChild',['avMenuChilds' => $menu->avMenuChilds])
    @endif
</li>
@endforeach

我想做的是删除 sidebar.blade.php 中的 foreach 并调用如下方法:

<?php

$idMenu = App\Models\Sistem\RoleMenuModel::whereIn('id_role', Auth::user()->roles_array)->pluck('id_menu')->toArray();

?>

@foreach(App\Models\Sistem\MenuModel::where('parent_id', 0)->whereIn('id', $idMenu)->get() as $menu)
<li class="nav-item">
   <a href="{{ $menu->url }}" class="nav-link">
      <i class="nav-icon {{ $menu->icon }}"></i>
         <p>
            {{ $menu->deskripsi }}
         </p>
    </a>
    @if(count($menu->avMenuChilds))
        @include('_partials.menuChild',['avMenuChilds' => $menu->avMenuChilds])
    @endif
</li>
@endforeach

提前感谢:)

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    您可以在 RoleMenuModel 模型中创建这样的访问器。

    public function getRolesArrayAttribute(){
       return $this->roles()->pluck('id_menu')->toArray() ?? collect([]);
    }
    

    this,collect([]) 我已经使用了,因为如果还没有任何角色分配给用户,那么默认情况下,roles_array 将返回一个空数组。

    可以这样调用:

    Auth::user()->roles_array
    

    【讨论】:

    • 似乎我返回了 id_menu 数组是吗?我的Auth::user()-&gt;roles 正在返回:[{ "id_user": 9, "id_role": 1 }, { "id_user": 9, "id_role": 3 }],我想要的结果是:[ 1,3 ]
    • 那么,你能不能把pluck方法中的'id_menu'换成id_role?
    • 解决了!谢谢朋友@paresh :) 但我把getRolesArrayAttribute() 方法放在User.php 模型中而不是RoleMenuModel 中。无论如何,非常感谢你
    猜你喜欢
    • 1970-01-01
    • 2022-01-04
    • 2018-11-12
    • 1970-01-01
    • 2023-03-29
    • 2016-02-06
    • 2018-09-14
    • 1970-01-01
    • 2015-07-02
    相关资源
    最近更新 更多