2014-10-15 10 views
0

"zizaco/confide": "[email protected]""zizaco/entrust": "1.2.*@dev"을 사용 중입니다.시드 데이터베이스 - [ErrorException] 비 객체의 속성을 가져 오려고 시도 중

두 개의 자습서 (마이그레이션 동의)에서 설명한대로 모든 것을 설정했습니다. 또한, 내가 만든 다음 모델 :

사용자 :

<?php 

    use Zizaco\Confide\ConfideUser; 
    use Zizaco\Confide\Confide; 
    use Zizaco\Confide\ConfideEloquentRepository; 
    use Zizaco\Entrust\HasRole; 
    use Carbon\Carbon; 
    use Illuminate\Auth\UserInterface; 
    use Illuminate\Auth\Reminders\RemindableInterface; 

class User extends Eloquent implements UserInterface, RemindableInterface{ 
    use ConfideUser; 
    use HasRole; 

     /** 
     * Get user by username 
     * @param $username 
     * @return mixed 
     */ 
     public function getUserByUsername($username) 
     { 
      return $this->where('username', '=', $username)->first(); 
     } 

     public function joined() 
     { 
      return String::date(Carbon::createFromFormat('Y-n-j G:i:s', $this->created_at)); 
     } 

     public function saveRoles($inputRoles) 
     { 
      if(! empty($inputRoles)) { 
       $this->roles()->sync($inputRoles); 
      } else { 
       $this->roles()->detach(); 
      } 
     } 

     public function currentRoleIds() 
     { 
      $roles = $this->roles; 
      $roleIds = false; 
      if(!empty($roles)) { 
       $roleIds = array(); 
       foreach($roles as &$role) 
       { 
        $roleIds[] = $role->id; 
       } 
      } 
      return $roleIds; 
     } 

     public static function checkAuthAndRedirect($redirect, $ifValid=false) 
     { 
      // Get the user information 
      $user = Auth::user(); 
      $redirectTo = false; 

      if(empty($user->id) && ! $ifValid) // Not logged in redirect, set session. 
      { 
       Session::put('loginRedirect', $redirect); 
       $redirectTo = Redirect::to('user/login') 
        ->with('notice', Lang::get('user/user.login_first')); 
      } 
      elseif(!empty($user->id) && $ifValid) // Valid user, we want to redirect. 
      { 
       $redirectTo = Redirect::to($redirect); 
      } 

      return array($user, $redirectTo); 
     } 

     public function currentUser() 
     { 
      return (new Confide(new ConfideEloquentRepository()))->user(); 
     } 

     public function getReminderEmail() 
     { 
      return $this->email; 
     } 

    } 

역할 :

<?php 

use Zizaco\Entrust\EntrustRole; 

class Role extends EntrustRole { 

    public function validateRoles(array $roles) 
    { 
     $user = Confide::user(); 
     $roleValidation = new stdClass(); 
     foreach($roles as $role) 
     { 
      // Make sure theres a valid user, then check role. 
      $roleValidation->$role = (empty($user) ? false : $user->hasRole($role)); 
     } 
     return $roleValidation; 
    } 
} 

권한 :

<?php 

use Zizaco\Entrust\EntrustPermission; 

class Permission extends EntrustPermission 
{ 
    public function preparePermissionsForDisplay($permissions) 
    { 
     // Get all the available permissions 
     $availablePermissions = $this->all()->toArray(); 

     foreach($permissions as &$permission) { 
      array_walk($availablePermissions, function(&$value) use(&$permission){ 
       if($permission->name == $value['name']) { 
        $value['checked'] = true; 
       } 
      }); 
     } 
     return $availablePermissions; 
    } 

    /** 
    * Convert from input array to savable array. 
    * @param $permissions 
    * @return array 
    */ 
    public function preparePermissionsForSave($permissions) 
    { 
     $availablePermissions = $this->all()->toArray(); 
     $preparedPermissions = array(); 
     foreach($permissions as $permission => $value) 
     { 
      // If checkbox is selected 
      if($value == '1') 
      { 
       // If permission exists 
       array_walk($availablePermissions, function(&$value) use($permission, &$preparedPermissions){ 
        if($permission == (int)$value['id']) { 
         $preparedPermissions[] = $permission; 
        } 
       }); 
      } 
     } 
     return $preparedPermissions; 
    } 
} 

또한, 처음부터 데이터베이스에 값을 넣고 싶습니다. 따라서 사용자, 역할 및 권한을 위해 여러 가지 시드를 작성했습니다. 그러나, 나는 내 허락 시더에 오류가 발생합니다 :

UserTableSeeder :

<?php 

class UsersTableSeeder extends Seeder { 

    public function run() 
    { 
     DB::table('users')->delete(); 


     $users = array(
      array(
       'username' => 'admin', 
       'email'  => '[email protected]', 
       'password' => Hash::make('admin'), 
       'confirmed' => 1, 
       'confirmation_code' => md5(microtime().Config::get('app.key')), 
       'created_at' => new DateTime, 
       'updated_at' => new DateTime, 
      ), 
      array(
       'username' => 'moderator', 
       'email'  => '[email protected]', 
       'password' => Hash::make('moderator'), 
       'confirmed' => 1, 
       'confirmation_code' => md5(microtime().Config::get('app.key')), 
       'created_at' => new DateTime, 
       'updated_at' => new DateTime, 
      ), 
      array(
       'username' => 'user', 
       'email'  => '[email protected]', 
       'password' => Hash::make('user'), 
       'confirmed' => 1, 
       'confirmation_code' => md5(microtime().Config::get('app.key')), 
       'created_at' => new DateTime, 
       'updated_at' => new DateTime, 
      ) 
     ); 

     DB::table('users')->insert($users); 
    } 

} 

RolesTableSeeder :

<?php 

class RolesTableSeeder extends Seeder { 

    public function run() 
    { 
     DB::table('roles')->delete(); 

     $adminRole = new Role; 
     $adminRole->name = 'adminRole'; 
     $adminRole->save(); 

     $standRole = new Role; 
     $standRole->name = 'userRole'; 
     $standRole->save(); 

     $modRole = new Role; 
     $modRole->name = 'modRole'; 
     $modRole->save(); 

     $user = User::where('username','=','admin')->first(); 
     $user->attachRole($adminRole); 

     $user = User::where('username','=','user')->first(); 
     $user->attachRole($standRole); 

     $user = User::where('username','=','moderator')->first(); 
     $user->attachRole($modRole); 

    } 
} 

PermissionsTableSeeder :

<?php 

class PermissionsTableSeeder extends Seeder { 

    public function run() 
    { 
     DB::table('permissions')->delete(); 

     $permissions = array(
      array(// 1 
       'name'   => 'manage_users', 
       'display_name' => 'manage users' 
      ), 
      array(// 2 
       'name'   => 'manage_roles', 
       'display_name' => 'manage roles' 
      ), 
      array(// 3 
       'name'   => 'standart_user_role', 
       'display_name' => 'standart_user_role' 
      ), 
     ); 

     DB::table('permissions')->insert($permissions); 

     DB::table('permission_role')->delete(); 

     $role_id_admin = Role::where('name', '=', 'admin')->first()->id; 
     $role_id_mod = Role::where('name', '=', 'moderator')->first()->id; 
     $role_id_stand = Role::where('name', '=', 'user')->first()->id; 

     $permission_base = (int)DB::table('permissions')->first()->id - 1; 

     $permissions = array(
      array(
       'role_id'  => $role_id_admin, 
       'permission_id' => $permission_base + 1 
      ), 
      array(
       'role_id'  => $role_id_admin, 
       'permission_id' => $permission_base + 2 
      ), 
      array(
       'role_id'  => $role_id_mod, 
       'permission_id' => $permission_base + 1 
      ), 
      array(
       'role_id'  => $role_id_mod, 
       'permission_id' => $permission_base + 3 
      ), 
      array(
       'role_id'  => $role_id_stand, 
       'permission_id' => $permission_base + 3 
      ), 
     ); 

     DB::table('permission_role')->insert($permissions); 
    } 

} 
,

이것은 내가 오류가 때 db:seed을 실행 :

$ php artisan db:seed 
************************************** 
*  Application In Production!  * 
************************************** 

Do you really wish to run this command? Y 
Seeded: UsersTableSeeder 
Seeded: RolesTableSeeder 



    [ErrorException] 
    Trying to get property of non-object 



db:seed [--class[="..."]] [--database[="..."]] [--force] 

모든 권고 내 파종 잘못 뭐하는 거지?

답변 해 주셔서 감사합니다. 당신은 id을하고 싶지만 그러한 기록이 없습니다 당신이 오류 때문에 존재하지

$role_id_admin = Role::where('name', '=', 'admin')->first()->id; 
$role_id_mod = Role::where('name', '=', 'moderator')->first()->id; 
$role_id_stand = Role::where('name', '=', 'user')->first()->id; 

:

+0

실행중인 시드 자 클래스와 시드를 포함해야합니다. 이제 우리는'RolesTableSeeder' 뒤에 무엇이 나올지 모른다. –

+0

@ MarcinNabiałek 나는 내 질문을 업데이트했다! – mrquad

답변

2

내가 가진 문제라고 생각합니다. RolesTableSeeder보고 있기 때문에 레코드는 역할이 방법을 만들 admin, moderator 또는 user 이름으로 아마이 없습니다 : 이름 adminRole, userRole, modRole

$adminRole = new Role; 
$adminRole->name = 'adminRole'; 
$adminRole->save(); 

$standRole = new Role; 
$standRole->name = 'userRole'; 
$standRole->save(); 

$modRole = new Role; 
$modRole->name = 'modRole'; 
$modRole->save(); 

. 따라서 RolesTableSeeder 안에있는 이름을 변경하거나 변경하십시오. PermissionsTableSeeder