2017-08-16 4 views
0

私は以下のような3つのテーブルを持っています。Laravelはeloquant関係の1つ以上のパラメータをチェックします

卓上AccountServiceの

id | service_id| account_id| 
---------------------------- 
1 | 1   | 8181  | 
2 | 2   | 8181  | 
3 | 3   | 8181  | 
4 | 5   | 8181  | 

表: - サービス

id | Name | 
------------ 
1 | A  | 
2 | B  | 
3 | C  | 
4 | D  | 

表: - CompletedService

id | service_id | account_id 
------------------------------ 
1 | 1   | 8181 
2 | 1   | 8182 
3 | 1   | 8181 
4 | 2   | 8181 

今すぐMY関係クエリは以下の通りです。

$acc = AccountService::with(['service' => function($q) { 

        }])->with(['completedServiceRest' => function($q) { 

        }])->where('account_id', $account_id)->get(); 

account_idとservice_idの両方に基づいて関係部分のレコードを取得するにはどうすればよいですか。 現在、レコードはcompletedSericeRestの関係で表示され、account_idのすべてのレコードがAccountServiceテーブルと一致します。

この関係が発生すると、account_idだけでなく、完了したサービスからservice_idとaccount_idの両方をチェックします。

モデル内の関係は以下のとおりです。

public function completedServiceRest() { 
    return $this->hasMany('App\CompletedService', 'account_id', 'account_id'); 
} 

enter image description here

は現在ACCOUNT_IDのすべてのレコードがのみACCOUNT_IDに影響を与えるパラメータのservice_idとACCOUNT_IDの両方に基づいていないマッチします。

ありがとうございました。

答えて

0

それは別の構造、あなたのテーブル「アカウントサービス」の例と容易になるだろう(もちろん、完成デフォルトで0になります):

id | service_id | account_id | completed | 
------------------------------------------ 
1 |  1  | 8181 |  0  | 
2 |  2  | 8181 |  1  | 

あなたの主な関係は次のようになります。

public function accountedServices() 
{ 
    return $this->hasMany('App\AccountService', 'account_id', 'account_id'); 
} 

そして、あなたの完成サービスをチェックする:OTがたくさんありますので

public function completedServiceRest() 
{ 
    return $services->accountedServices()->where('completed', 1)->get(); 
} 
+0

ありません私は私のテーブル構造を変更することはできませんが彼女のフィールドは0,1で完了しただけではありません。だからこれは動作しません。 TX –

関連する問題