2015-05-28 5 views
0

В моем приложении у меня есть таблица Уведомления и таблица пользователей, уведомление может принадлежать многим пользователям, поэтому в моем классе уведомления у меня есть следующие,Laravel 4 собирающие данные отношения

public function user() 
{ 
    return $this->belongsToMany('User'); 
} 

В моей базе данных У меня также есть таблица с именем notification_user, которая находится рядом с моей таблицей notifications. Таблица notification_user содержит следующие строки,

notification_id, user_id, is_read, created_at, updated_at

Я бегу следующий код для возврата уведомлений для конкретного пользователя,

$notifications = Notification::whereHas('user', function($q){ 
     $q->where('user_id', '=', 101); 
})->get(); 

проблемы я что это не возвращает атрибут is_read из таблицы notification_user, которую мне отчаянно нужно! Я попытался добавить после запроса запрос

$notification->load('user'), но это просто добавляет данные пользователей в качестве объекта.

Есть ли возможность получить данные реляционных таблиц?

ответ

0

Вам нужно добавить немного дополнительных данных в свои отношения, чтобы рассказать laravel о том, чтобы вытащить дополнительные данные из сводной таблицы. (Не забудьте сделать это на другой модели в ваших отношениях, а)

public function user() 
{ 
    return $this->belongsToMany('User')->withPivot('is_read'); 
} 

Затем вы должны иметь атрибут ->pivot доступный на модели с is_read собственности. (например: $ notification-> pivot-> is_read). Это кратко описано в документах. http://laravel.com/docs/5.0/eloquent#working-with-pivot-tables

Если у вас уже есть идентификатор пользователя, просто чтобы облегчить для себя, вы не можете просто использовать соотношение между ними ?

$user = User::find(101); 

foreach($user->notifications as $notifications) 
{ 
    if ($notification->pivot->is_read === false) 
    { 
     // Notification is unread, lets do something 
    } 
}