2015-07-25 5 views
0

Я пытаюсь сделать RBAC в своем собственном программном обеспечении для форума.Laravel получить цвет ролей и многое другое

До сих пор разрешающие действия работали, но проблема в том, что когда я хочу добавить цвета к именам пользователей (что у MyBB также есть), что-то не работает, и я не понимаю его.

Так у меня есть ForumController с этим кодом внутри:

<?php 

class ForumController extends \BaseController { 

    public function index() 
    { 
     $forums = Forums::orderBy('disp_order', 'asc')->get(); 
     $categories = Categorie::orderBy('disp_order', 'asc')->get(); 

     return View::make('index')->with('forums', $forums)->with('categories', $categories); 
    } 

    public function forum($name) 
    { 
     $forums = Forums::where('name', '=', str_replace('Forum-', '',str_replace('-', ' ', $name)))->first(); 
     $categories = Categorie::orderBy('disp_order', 'asc')->get(); 
     return View::make('forum')->with('forums', $forums)->with('categories', $categories); 
    } 

    public function categorie($name) 
    { 
     $categories = Categorie::where('name', '=', str_replace('Categorie-', '',str_replace('-', ' ', $name)))->first(); 
     $threads = Thread::orderBy('date_posted', 'asc')->get(); 
     return View::make('categorie')->with('categories', $categories)->with('threads', $threads); 
    } 

    public function thread($title) 
    { 
     $thread = Thread::where('title', '=', str_replace('Thread-', '',str_replace('-', ' ', $title)))->first(); 
     $comments = Comment::orderBy('posted_at', 'asc')->get(); 
     return View::make('thread')->with('threads', $thread)->with('comments', $comments); 
    } 

} 

Хорошо, все из этого работает.

Но теперь мне нужно получить роли для пользователей внутри функции thread.

У меня также есть эти модели:

models

Существует только распространяется на красноречивые и в protected $table внутри этих файлов.

Схема моей role таблицы выглядит следующим образом: scheme

Я слышал somethig о belongsTo и hasMany, но я действительно не понимаю ...

Я хочу, чтобы иметь возможность получите правильный цвет для нужного пользователя.

Так схема таблицы пользователя:

user scheme

Я надеюсь, что кто-то может помочь мне, потому что я ищу ответа долгое время.

Я использую Laravel4

сердечным приветом,

Робин

+0

не являются комментарии, связанные с потоками? Ваш комментарий: orderBy ('posted_at') -> with ('user.role') -> get() 'будет возвращать все комментарии ко всем потокам, что не похоже на то, что вы хотите. Предполагая, что комментарии имеют 'thread_id', вы хотите добавить' public function comment() {$ this-> hasMany (Comment :: class); } 'в ваш класс Thread и загружать потоки с помощью' Thread :: -> with ('comments.user.role') ' –

ответ

0

Вы правы, вам нужно добавить relationships:

// In Comment.php, assuming that your comments table has a user_id field. 
public function user() 
{ 
    return $this->belongsTo(User::class); 
} 

// In User.php 
public function role() 
{ 
    return $this->belongsTo(Role::class); 
} 

Затем настроить контроллер eager load эти отношения.

$comments = Comment::orderBy('posted_at')->with('user.role')->get(); 

Теперь вы можете показать цвет рядом с комментарием в шаблоне лезвия, как:

@foreach ($comments as $comment) 
    <p>Color: {{ $comment->user->role->colour }}</p> 
@endfoeach 
+0

Когда я пытаюсь получить к нему доступ в своем клиенте, я получаю сообщение об ошибке:' Попытка получить свойство of non-object' – Robin

+0

Я использовал тот же самый код, что и в вашем ответе. – Robin

+0

Извините, я получил код немного неправильно - исправлено. Если в таблице комментариев есть поле user_id, а в таблице пользователя - поле role_id, то оба отношения должны быть типа «ownTo».Обратите внимание, что вы получите «Попытка получить свойство не-объекта», если либо user_id, либо role_id являются «NULL». –