2016-10-27 4 views
0

Хорошо, чтобы начать легко, у меня есть таблица, названная рядами с строками (разрешениями), которые являются int и могут быть 1 или 0. В таблице пользователя есть строка с идентификатором ранга.Laravel Дополнительная информация об авторе

Пример пользователей таблицы: Имя: Синтекс Email: *@**.nl Ранг: 2

Пример занимает таблица: ID: 2 permToEdit: 1

Я могу показать ранг идентификатор с: Auth :: user() -> rank Но это мне не помогает. Я хочу получить строки ранга следующим образом: Auth :: user() -> rank-> permToEdit. Что можно, если выполнить следующий запрос:

Auth::user()->rank = DB::table('ranks')->select('color')->where([['id', '=', Auth::user()->rank],])->first(); 

Это делает возможным, но я должен Acces его от каждого контроллера и каждого вида. Итак, где я помещаю эту строку, чтобы сделать ее доступной везде?

+1

Читайте о [отношения] (https://laravel.com/docs/5.3/eloquent-relationships) – tam5

+0

Может ли пользователь иметь 1 или несколько «рангов»? –

ответ

0

Для отношений вы можете просто добавить этот метод в вашей модели пользователя

public function rank() 
{ 
    return $this->hasOne(Rank::class); 
} 

Но для пользователя ролей/разрешений Я рекомендую Zizaco/entrust помощника.

+0

Для этого ранг столбца должен быть «rank_id» или вам нужно добавить имя столбца в качестве параметра в метод отношений. – tam5

+0

@tam Мой пример будет работать, если таблица 'users' имеет поле rank_id. – aleksejjj

+0

Вот что я только что сказал. – tam5

0

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

У вас есть таблица: «пользователи»

И таблица: «Ряды»

Так что, если вы создаете сводную таблицу rank_user (Laravel работает в алфавитном порядке, здесь, так что ранг приходит первым, вам может изменить это в вашей модели пользователя «ранг»).

Так первый you'l нужно создать сводную таблицу:

Schema::create(‘rank_user', function(Blueprint $table) { 
      $table->increments('id'); 
      $table->integer('user_id'); 
      $table->integer('rank_id'); 
      $table->boolean('permToEdit') // withs converts to a ‘tiny int’ in the database 
}); 

Итак, в модели пользователя вам нужно создать:

public function ranks() 
    { 
     return $this->belongsToMany(‘App\Rank’)->withPivot(‘permToEdit’); 
    } 

А вы ранг модели:

public function users() 
    { 
     return $this->belongsToMany(App\User') 
      ->withPivot('permToEdit '); 
    } 

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

public function getPermToEdit() 
{ 
    Return $this->ranks()->wherePivot(‘permToEdit’, true)->first(); 
} 

Или, если вам нужно па определенный идентификатор пользователя вы можете:

public function getUserPermToEdit($user_id) 
{ 
    Return $this->ranks()->wherePivot('user_id', $user_id)->wherePivot(‘permToEdit’, true)->first(); 
} 

Если все это ново для вас проверить: https://laravel.com/docs/5.3/eloquent-relationships или https://www.youtube.com/watch?v=xIBST5vVq84&list=PLfdtiltiRHWEb-tzSN99Zy-39Y1tKl5DB

+0

Здесь нет необходимости в сводной таблице. Но может быть хорошим предложением, если OP хочет изменить свой подход – tam5

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