2017-02-16 13 views
-1

Я эту таблицу, называется "доля":Laravel Eloquent модель получить уникальный пользовательский

share table

и это "пользователь" таблица:

user table

Так я получаю список общего элемента по модели «Доля» и пользователю, связанному с каждой записью:

class Share extends Model 
{ 
    public function UserDetail() 
    { 
     return $this->belongsTo('App\User', 'user_id', 'id'); 
    } 
} 

Что мне нужно, чтобы вернуть пользователям parent_id 3:

$user = Share::where('parent_id', '=', 3)->paginate(15); 

Его возвращает все, но мне нужно, чтобы вернуть только уникальные пользователи, как это:

enter image description here

Цените вашу помощь.

+0

Пожалуйста, не оценивайте отрицательную точку. Это только мой вопрос. –

+0

Пожалуйста, объясните еще раз, что вы пытаетесь сделать. Вы хотите взять «Share» и получить пользователей этой доли? – EddyTheDove

+0

@ EddyTheDove Да, точно. Мне нужно получить список пользователей из общей таблицы. Поэтому я могу показать, сколько у меня пользователей. –

ответ

0

Вы можете использовать метод groupBy, чтобы получить уникальные пользователи. Смотрите эту ссылку https://laravel.com/docs/5.4/queries

$user = Share::where('parent_id', '=', 3)->groupBy('item_id')->paginate(15); 

Hopes ответил на ваш вопрос.

+0

Это не работает. Я попробовал это, но это заставило эту ошибку: «SQLSTATE [42000]: ошибка синтаксиса или нарушение прав доступа: 1055« app_db.share.id »не находится в GROUP BY (SQL: выберите * из' share' где 'parent_id' = 3 группа по 'email' limit 15 offset 0)' –

+0

@ Martian.titan изменить его на 'user_id' – Nere

+0

К сожалению, такая же ошибка. –

0

В соответствии с вашими комментариями, вы хотите взять все акции с аналогичной parent_id (3):

$shares = Share::where('parent_id', 3)->get(); 

и их пользователей. Каждая доля принадлежит пользователю. Но каждый пользователь может делиться много раз, но хочет взять пользователя только один раз. Мы могли бы сделать

//Using eloquent 
$users = Share::where('parent_id', 3) 
->join('users', 'users.id', '=', 'shares.user_id') 
->select('users.id', 'users.email', 'users.first_name', 'users.last_name') 
->groupBy('users.id', 'users.email', 'users.first_name', 'users.last_name') 
->get(); 

//using Query builder 
$users = DB::table('shares') 
->join('users', 'users.id', '=', 'shares.user_id') 
->where('shares.parent_id', 3) 
->select('users.id', 'users.email', 'users.first_name', 'users.last_name') 
->groupBy('users.id', 'users.email', 'users.first_name', 'users.last_name') 
->get(); 

Это должно дать вам четкий список пользователей, имеющих общую parent_id = 3.

+0

К сожалению, он не работает должным образом. Он просто возвращает детали parent_id 3, а не детали пользователей. –