2017-12-21 44 views
1

に参加します - A)FIRSTNAME b)のLASTNAME c)は、電子メール雄弁の複数のは、私は3つのテーブルを持っているlaravel

サービステーブルが含まれています a)のSERVICE_NAME

ウェブサイトのサービスプロバイダがサービスを追加しており、これらのサービスがサービステーブルに保存されていることが起こっています。一方、ユーザーはこれらのサービスを予約し、予約後はuser_idとなり、予約されたservice_idはordersテーブルに保存されます。

私が行ったことは、ログインしているサービスプロバイダは、注文テーブルに登録されているユーザーの詳細しか見ることができないということです。このため

、私は雄弁使用して、コードの下に使用: -

の$ USER_IDは、ユーザーIDが含まれていると$のservice_idが、サービスIDが含まれてい
$get_result = App\Order::whereIn('user_id',$user_id)->whereIn('service_id',$service_id)->get(); 

。これにより、ログインしているプロバイダのサービスに登録されているユーザの結果が得られます。

私が直面している問題は、firstname、lastname、ユーザーのテーブルからの電子メール、サービステーブルからのサービス名などのユーザーの詳細を取得することです。

これらの表を雄弁にするにはどうすればいいですか?

答えて

1

ここで私が直面する問題は、firstname、lastname、usersテーブルからの電子メール、サービステーブルからのサービス名などのユーザーの詳細を取得したいということです。

eager loadingを使用してください。あなたのクエリにこの句を追加します。

->with(['service', 'user']) 

は、これはすべてのOrderためServiceUserモデルをロードします。

ていることを確認し、あなたがOrderモデル内の関係定義しました:左を使用して、既存のクエリから

public function user() 
{ 
    return $this->belongsTo(User::class); 
} 

public function service() 
{ 
    return $this->belongsTo(Service::class); 
} 
+0

ありがとう!私は次のように行っている: - クラスのご注文は、モデル { パブリック関数のユーザー() \t { \t戻ります$ this-> belongsToの(ユーザー::クラス)を拡張します。 \t} \t公共機能のサービス() \t { \t戻ります$ this-> belongsToの(サービス::クラス)。 \t}} –

+0

ザ・ブレードのファイルで呼び出さその後 : - $ get_details =のApp \注文::([ 'サービス'、 'ユーザー'])と - > get()は、私は結果を受け取りました。 –

+0

しかし今はforeachループを適用しています。私はそこにどのように表示しますか?私は \t \t​​{{$詳細 - > first_name}}さん \t \t​​{{$詳細 - >電子メール}} \t \t​​{{$詳細 - >タイトル}} \t \tを使用していますforeachループで –

1

あなたは

$get_result = App\Order::whereIn('user_id',$user_id) 
->whereIn('service_id',$service_id) 
->leftJoin('users', 'orders.user_id', 'users.id') 
->leftJoin('services', 'orders.service_id', 'services.id')->get(); 

にそれを拡張することができますし、あなたがしたい場合は入会します特定の列を選択して追加することができます。

->select('orders.*', 'users.firstname', 'users.lastname', 'users.email', 'services.name') 

この経路を移動したくない場合はeをクエリと共に使用することもできます。ここで説明するように、サービスおよびユーザーモデルを注文要求に追加することもできます。https://laravel.com/docs/5.5/eloquent-relationships#eager-loading

関連する問題