2014-10-17 4 views
0

У меня есть следующие в моем методе контроллера, который возвращает JSON на мой взгляд:Доверьте не находя роли пользователя

public function RolesForUser() 
    { 
     $userid = Input::get('userid'); 

     $assigned = DB::table('assigned_roles') 
       ->select(array('role_id')) 
       ->where('user_id', '=', $userid) 
       ->get(); 

     $user = User::find($userid); 
     $roles = $user->roles(); 

     $data = array('assigned' => $assigned, 'roles' => $roles); 
     return Response::json($data); 
    } 

Возвращает следующее (проверено с помощью Fiddler):

{"assigned":[{"role_id":"2"},{"role_id":"3"},{"role_id":"4"}],"roles":{}} 

В SQL заявление, использует Query Builder возвращает правильные результаты, но метод, который использует Entrust (скопированный с Entrust Issue 34 после внесения изменений в мою модель пользователя) не возвращает никаких ролей.

Я также пробовал решение в this SO question, но он просто дает мне ошибку SQL.

Любые идеи, в которых я ошибаюсь, я нахожусь на Laravel 4.2.11?

Моя модель Пользователь:

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

/** 
* The database table used by the model. 
* 
* @var string 
*/ 
protected $table = 'Users'; 

/** 
* The attributes excluded from the model's JSON form. 
* 
* @var array 
*/ 
protected $hidden = array('Password'); 

protected $primaryKey = 'UserID'; 

public $timestamps = false; 

/*Standard methods removed for brevity*/ 

public function roles() 
{ 
    return $this->hasMany('Role'); 
} 
} 
+0

Похоже, что отношения между моделью пользователя и его ролями настраиваются таким образом, чтобы он не работал на вас. Можете ли вы добавить используемые методы или черты отношения? Благодаря! – hannesvdvreken

+0

@hannesvdvreken - Я добавил соответствующие биты моей модели пользователя – SteB

ответ

0

Похоже, у вас есть определенный метод roles, который не должен быть определен. Использование Trait HasRole уже добавляет отношение roles к модели User.

Посмотрите на другие вещи, что HasRole добавляет к модели: метод https://github.com/Zizaco/entrust/blob/master/src/Entrust/HasRole.php

Роли() возвращает отношения. Рекомендуется возвращать ->roles или ->roles()->get().

Надеюсь, это поможет.

+0

С моим методом собственных ролей или без него - он ничего не возвращает. Я также попытался переименовать его, чтобы избежать потенциального конфликта имен, но без радости. – SteB

+0

@SteB Попробуйте удалить() off $ role = $ user-> role(); так как это вернет объект Builder Query, а не коллекцию, которую вы ожидаете, поскольку Eloquent обычно позволяет вам запрашивать отношение, если вы используете(). Но сделайте то, что говорит hannesvdvreken. –

+0

Спасибо, я обновил свой ответ с дополнительной информацией. – hannesvdvreken

Смежные вопросы