2017-02-16 51 views
-1

我有這個表,叫 「分享」:Laravel雄辯模型獲得唯一的用戶

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

請再次解釋你正在嘗試做什麼。你想採取「分享」,並獲得該份額的用戶? – EddyTheDove

+0

@EddyTheDove是,的確。我需要從共享表中獲取用戶列表。所以我可以顯示我有多少用戶。 –

回答

0

您可以使用groupBy方法獲取唯一用戶。請參閱此鏈接 https://laravel.com/docs/5.4/queries

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

的希望回答你的問題。

+0

這不起作用。我嘗試了這一點,但它拋出了這個錯誤:'SQLSTATE [42000]:語法錯誤或訪問衝突:1055'app_db.share.id'不在GROUP BY中(SQL:select * from'share',其中'parent_id' = 3由'電子郵件'組限制15偏移量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的細節而不是用戶的詳細信息。 –