2017-02-16 24 views
-1

私は "シェア" と呼ばれるこのテーブルを、持っているを取得します「共有」モデルによる共有アイテムのリストおよび各エントリに関連付けられたユーザ:Laravel雄弁モデルは、ユニークユーザー

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); 

希望は、あなたの質問に答えました。

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

とそのユーザー:

+0

これは機能しません。 SQLSTATE [42000]:構文エラーまたはアクセス違反:1055 'app_db.share.id'がGROUP BYにありません(SQL:select * from 'share' where 'parent_id' = 3 '電子メール'制限15オフセット0) ' –

+0

@ Martian.titanは' user_id'に変更します – Nere

+0

残念ながら同じエラーです。 –

0

あなたのコメントによると、同様のparent_id(3)で全株式を取りたいです。各共有はユーザーに属します。しかし、各ユーザーのユーザーは何度も共有することができますが、ユーザーを1回だけ取りたいと考えています。私たちは、

//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の詳細を返すだけです。 –