Laravel 回显视图中相关表中值的名称
请注意:我对laravel和编程基本上是新手 所以我在“用户”和“角色”之间有一个多对多的关系,使用这个新东西,我刚刚学习了一个透视表“角色\用户”。现在,我想显示我的用户列表以及他们拥有的角色的名称 用户迁移Laravel 回显视图中相关表中值的名称,laravel,Laravel,请注意:我对laravel和编程基本上是新手 所以我在“用户”和“角色”之间有一个多对多的关系,使用这个新东西,我刚刚学习了一个透视表“角色\用户”。现在,我想显示我的用户列表以及他们拥有的角色的名称 用户迁移 use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateUser
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
}
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateRolesTable extends Migration
{
public function up()
{
Schema::create('roles', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
});
}
public function down()
{
Schema::dropIfExists('roles');
}
}
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateRoleUserTable extends Migration
{
public function up()
{
Schema::create('role_user', function (Blueprint $table) {
$table->bigInteger('role_id')->unsigned();
$table->bigInteger('user_id')->unsigned();
});
}
public function down()
{
Schema::dropIfExists('role_user');
}
}
角色迁移
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
}
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateRolesTable extends Migration
{
public function up()
{
Schema::create('roles', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
});
}
public function down()
{
Schema::dropIfExists('roles');
}
}
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateRoleUserTable extends Migration
{
public function up()
{
Schema::create('role_user', function (Blueprint $table) {
$table->bigInteger('role_id')->unsigned();
$table->bigInteger('user_id')->unsigned();
});
}
public function down()
{
Schema::dropIfExists('role_user');
}
}
角色\用户迁移
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
}
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateRolesTable extends Migration
{
public function up()
{
Schema::create('roles', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
});
}
public function down()
{
Schema::dropIfExists('roles');
}
}
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateRoleUserTable extends Migration
{
public function up()
{
Schema::create('role_user', function (Blueprint $table) {
$table->bigInteger('role_id')->unsigned();
$table->bigInteger('user_id')->unsigned();
});
}
public function down()
{
Schema::dropIfExists('role_user');
}
}
用户模型
namespace App;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
use Notifiable;
protected $fillable = [
'name', 'email', 'password', 'roles_id'
];
protected $hidden = [
'password', 'remember_token',
];
protected $casts = [
'email_verified_at' => 'datetime',
];
public function roles()
{
return $this->belongsToMany('App\Role');
}
public function authorizeRoles($roles)
{
if (is_array($roles)) {
return $this->hasAnyRole($roles) ||
abort(401, 'This action is unauthorized.');
}
return $this->hasRole($roles) ||
abort(401, 'This action is unauthorized.');
}
/**
* Check multiple roles
* @param array $roles
*/
public function hasAnyRole($roles)
{
return null !== $this->roles()->whereIn(‘name’, $roles)->first();
}
/**
* Check one role
* @param string $role
*/
public function hasRole($role)
{
return null !== $this->roles()->where(‘name’, $role)->first();
}
}
namespace App;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
public $timestamps = false;
public function users()
{
return $this->belongsToMany('App\User');
}
}
public function users()
{
return $this->belongsToMany('App\User', 'role_users'); //plural name
}
榜样
namespace App;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
use Notifiable;
protected $fillable = [
'name', 'email', 'password', 'roles_id'
];
protected $hidden = [
'password', 'remember_token',
];
protected $casts = [
'email_verified_at' => 'datetime',
];
public function roles()
{
return $this->belongsToMany('App\Role');
}
public function authorizeRoles($roles)
{
if (is_array($roles)) {
return $this->hasAnyRole($roles) ||
abort(401, 'This action is unauthorized.');
}
return $this->hasRole($roles) ||
abort(401, 'This action is unauthorized.');
}
/**
* Check multiple roles
* @param array $roles
*/
public function hasAnyRole($roles)
{
return null !== $this->roles()->whereIn(‘name’, $roles)->first();
}
/**
* Check one role
* @param string $role
*/
public function hasRole($role)
{
return null !== $this->roles()->where(‘name’, $role)->first();
}
}
namespace App;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
public $timestamps = false;
public function users()
{
return $this->belongsToMany('App\User');
}
}
public function users()
{
return $this->belongsToMany('App\User', 'role_users'); //plural name
}
我的观点
@extends('layouts/app')
@section('content')
<div class="row">
<div class="col-md-12">
<div class="card">
<div class="card-header">
<h4>Users</h4>
</div>
<div class="panel-body">
@if (count($users) > 0)
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>Email</th>
<th>Created on</th>
<th>Role</th>
</tr>
</thead>
@foreach ($users as $user)
<tr>
<td><em>{{$user->name}}</em></td>
<td><em>{{$user->email }} </em></td>
<td><em>{{$user->created_at}}</em></td>
<td><em>{{$user->roles->name}} </em></td>
<td>
<span class="table-remove">
{!!Form::open(['action' =>['userController@destroy', $user->id], 'method' => 'POST'])!!}
{{Form::hidden('_method', 'DELETE')}}
{{ Form::button('<i class="fas fa-trash-alt" aria-hidden="true"></i>', ['class' => 'btn btn-danger btn-sm', 'type' => 'submit']) }}
{!!Form::close()!!}
</span>
</td>
</tr>
@endforeach
</table>
</div>
</div>
</div>
</div>
@else
<p>No users found</p>
@endif
现在我得到了一个错误:
此集合实例上不存在属性[name]。(视图:C:\xampp\htdocs\Laravel\AmbitieProject\resources\views\users\index.blade.php)
我尝试回显“$user->roles->name”,我认为这应该适用于一对多关系,但我不确定如何使用多对多关系回显角色的名称。您定义关系时出错了 请在关系中定义
pivot
表
榜样
namespace App;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
use Notifiable;
protected $fillable = [
'name', 'email', 'password', 'roles_id'
];
protected $hidden = [
'password', 'remember_token',
];
protected $casts = [
'email_verified_at' => 'datetime',
];
public function roles()
{
return $this->belongsToMany('App\Role');
}
public function authorizeRoles($roles)
{
if (is_array($roles)) {
return $this->hasAnyRole($roles) ||
abort(401, 'This action is unauthorized.');
}
return $this->hasRole($roles) ||
abort(401, 'This action is unauthorized.');
}
/**
* Check multiple roles
* @param array $roles
*/
public function hasAnyRole($roles)
{
return null !== $this->roles()->whereIn(‘name’, $roles)->first();
}
/**
* Check one role
* @param string $role
*/
public function hasRole($role)
{
return null !== $this->roles()->where(‘name’, $role)->first();
}
}
namespace App;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
public $timestamps = false;
public function users()
{
return $this->belongsToMany('App\User');
}
}
public function users()
{
return $this->belongsToMany('App\User', 'role_users'); //plural name
}
您的透视表将返回一个Laravel。因此,如果不先获取记录,则无法访问记录的属性 如果有许多角色是可能的,我假设这是真的,因为您选择了透视表路线,您应该这样做,以逗号分隔的列表形式列出它们:
@如果($user->roles->count()>0)
{{$user->roles->内爆('name',',')}
@恩迪夫
如果只有一个角色,则只需使用first()
获取第一条记录:
@如果($user->roles->count()>0)
{{$user->roles->first()->name}
@恩迪夫
您可以共享控制器吗?$user->roles
将返回与用户关联的一个或多个角色的集合。然后,您需要在循环中获取每个角色,或者如果只有一个角色,请使用$user->roles->first()->name
获取集合中的第一个条目:$user->roles->first()->name有效,谢谢!我补充了一句作为回答。我不知道,谢谢。但这并没有解决我的问题。