【问题标题】:Display the value from laravel relationship?显示来自 laravel 关系的值?
【发布时间】:2017-02-20 12:09:35
【问题描述】:

我正在使用 laravel 5.1 和 mongodb,我需要在刀片上显示用户列表,我正在使用 Laravel 关系方法(hasMany),我试过但我得到了

error(Undefined property: Illuminate\Database\Eloquent\Collection::$roles)

表结构:

users-> userid, username,email, roleid.
user_roles->roleid,rolename;

我的问题很简单,我想要用户表中带有角色名的用户详细信息,我已经附上了我的查询结果图像。请问有什么建议吗? 控制器:

$users =User::with('roles')->get();
return view('Manage_users', compact('users'));

用户模型:

class User extends Eloquent 
{
  protected $collection = 'users';

  public function roles()
    {
        return $this->hasMany('App\User_role','roleid','roleid');
    }

}

用户角色模型:

class User_role extends Eloquent
{
  protected $collection = 'user_roles';


  public function user()
    {
        return $this->belongsTo('App\User','roleid','rolename');
    }
}

My query result image

My view page result

【问题讨论】:

    标签: mongodb laravel relationship


    【解决方案1】:

    在控制器中更新你的代码到这个

    $users = User::with('roles')->whereHas('roles', function ($query) {
                                       $query->where('roleid', '>', 0);
                                    })->get();
    return view('Manage_users', compact('users'));
    

    【讨论】:

    • 它的返回,空数组,集合 {#215 ▼ #items: [] }
    • @MuMuthukumar 是否有可能某些用户可能没有分配任何角色?
    • 不,所有用户都有一些角色,如管理员、承包商、检查员
    • @MuMuthukumar 是的,你是对的。我们可以使用 $model->exists('roles') 属性来检查它,而不是创建复杂的查询
    • @MuMuthukumar 尝试更改 $this->hasMany('App\User_role','roleid','roleid');到用户模型中的 hasOne()
    【解决方案2】:

    您可以在视图中使用以下代码。

    <table>
        <tr>
            <th>User Name</th>
            <th>Role</th>
        </tr>
        @foreach($users as $user)
            <tr>
                <td>{{ $user->username }}</td>
                <td>{{ $user->roles->rolename }}</td>
            </tr>
        @endforeach
    
    </table>
    

    以上代码将使用用户名及其角色创建表。

    希望对你有帮助!

    【讨论】:

    • 根据this image link 上面的答案应该可以工作
    • 它显示错误“尝试获取非对象的属性”
    • 如果没有分配给用户的角色,它将失败(作为错误)。
    • 默认所有用户都有角色ID
    • 您没有将用户变量传递给查看。使用return view('Manage_users')-&gt;with(['users' =&gt; $users]);
    【解决方案3】:

    你的口才和关系都错了。 一个用户属于一个角色,一个角色有很多用户。

    来自用户模型:

    public function role()
    {
       return $this->belongsTo('App\User_role','roleid','id');
    }
    

    来自 user_roles 模型:

    public function users()
    {
        return $this->hasMany('App\User','roleid','id');
    }
    

    【讨论】:

    • 用户可能有多个角色。你觉得@ray-cheng 怎么样?
    • 不,一个用户只有一个角色
    • @VaibhavrajRoham,一个用户有一个角色,从表结构中你可以得到。
    • 我找不到你@VaibhavrajRoham
    • @RayCheng 在这一点上是正确的,如果用户只能分配给他们一个角色。通过这种关系,您可以按照@Vaibhavraj-Roham 的建议进行操作,并在$user-&gt;role-&gt;rolename 提供$userUser 对象的实例
    【解决方案4】:

    我这样换刀片后它就可以工作了,谢谢大家

    @foreach($users as $user)
        <tr>
            <td>{{ $user->username }}</td>
            <td>
                @if ($user->roles)
                    {{ $user->roles->rolename }}
                @endif
            </td>
        </tr>
    @endforeach
    

    【讨论】:

      猜你喜欢
      • 2021-12-13
      • 2021-12-05
      • 1970-01-01
      • 2019-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多