2014-06-06 4 views
0

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

Я начал делать это, но должно быть лучше:

$contact = Contact::where('user_id', Auth::user()->id)->find($id); 

Проблема с предыдущей строки, что я хотел бы написать так:

$contact = Contact::find($id) 

Есть способ иметь, где предложение, загруженное как-то вроде фильтров, возможно, чтобы все поиски соответствовали Auth::user()->id?

+2

В чем проблема с использованием вашего первого запроса, который работает? если вы хотите, чтобы у него было что-то вроде: Contact :: ofUser (Auth :: user() -> id); вы можете взглянуть на область запросов Laravel http://laravel.com/docs/eloquent#query-scopes – Darryldecode

ответ

0

Я нашел ответ, который я искал на laracasts.com. (видео: Хранилища упрощенные)

Я решил проблему, создав репозитории. Например, в моем ContactController:

$contact = Contact::where('user_id', Auth::user()->id)->find($id); 

теперь

$contact = $this->contact->getAll(); 

DbRepository файл имеет:

public function getAll() { 
    return $this->model->where('user_id', Auth::user()->id)->get(); 
} 

Там много больше, и вы должны будете смотреть видео на настройте его. Гораздо больше работы по настройке, но это намного чище, и DbRepository может использоваться всеми моими контроллерами, поскольку каждая таблица будет иметь поле user_id.

0

Как и было предложено, вы можете использовать область запроса. Добавьте это в вашей Contact модели:

public function scopeOfUser($query, $user_id) 
{ 
    return $query->where('user_id', '=', $user_id); 
} 

И затем использовать его как это: $contacts = Contact::ofUser(Auth::user()->id)->get();.