Laravel 5播种数据透视表

时间:2016-01-05 17:23:06

标签: laravel laravel-5

我正在观看以下课程,并且正在跟随角色和权限,但现在我要用Seeder课程播种我的数据透视表,但不知道我应该如何实现这一目标。

https://laracasts.com/series/whats-new-in-laravel-5-1/episodes/16

这就是我现在所拥有的那种东西,但很明显在Role模型中的givePermissionTo()我确信有更好的方法来处理它。我有一种感觉我甚至不需要PermissionRole模型。这里的一个大问题是我为所有5个不同的角色和大约63种不同的权限运行它。

<?php

use Illuminate\Database\Seeder;
use App\PermissionRole;

class PermissionRoleTableSeeder extends Seeder
{
    public function run()
    {
        PermissionRole::create([
            'role_id' => 5,
            'permission_id' => '1',
        ]);

        PermissionRole::create([
            'role_id' => 5,
            'permission_id' => '2',
        ]);

        PermissionRole::create([
            'role_id' => 5,
            'permission_id' => '3',
        ]);
    }
}

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Role extends Model
{

    public function permissions()
    {
        return $this->belongsToMany(Permission::class);
    }

    public function givePermissionTo(Permission $permission)
    {
        return $this->permissions()->save();
    }

    public function users()
    {
        return $this->hasMany(User::class);
    }
}

有人可以暗示这是什么吗?

1 个答案:

答案 0 :(得分:0)

你通常不应该有你的数据透视表的模型,虽然有时候如果你在数据透视表中有一个额外的键指向一个不属于属于很多关系。例如,如果您的数据透视表中有一个created_by字段,该字段将是创建该关系的用户的ID。

说到这一点,对于你的数据透视表有一个模型来帮助你像你一样直接使用它也不应该有任何损害。

要查看没有模型的表,我会使用提供的Laravel函数。我不知道givePermissionTo函数应该如何工作,因为你实际上没有使用提供的参数。

我对此有一些限制,但你可以做的一种方法是使用sync函数。这将为所有角色提供所有权限。

$roles = \App\Role::all();
$permissions = \App\Permission::all();

foreach($roles as $role) {
    $role->permissions()->sync($permissions);
}