2017-09-14 4 views
0

私は5つの結合テーブルを持っています。これらの5つのテーブルの中には、いくつかのテーブルが同じ列名を持つものがあります。例えばLaravel Joins - 同じ列のすべてのデータを表示し、上書きを防止します。

public function index() { 
    $Users = User::leftJoin('employee', 'users.user_employee_id', 'employee.EMP_ID') 
       ->leftJoin('account_executive', 'account_executive.EMP_ID', '=', 'employee.EMP_ID') 
       ->leftJoin('independent_sales_rep', 'independent_sales_rep.EMP_ID', '=', 'employee.EMP_ID') 
       ->leftJoin('internal_sales_agent', 'internal_sales_agent.EMP_ID', '=', 'employee.EMP_ID'), 
       ->whereNotNull('users.user_employee_id') 
       ->get(); 
    return View('adminlte::equipment.salesreps', ['Users' => $Users]); 
} 

、account.executive、independent_sales_rep、およびinternal_sales_agentすべての3つはEMP_IDを持っています。

必要な情報を列単位で入力する以外に、すべてのデータを取得する方法を教えてください。

私は

->select('account_executive.EMP_ID as AE_EMP_ID', 
         'independent_sales_rep.EMP_ID as IND_EMP_ID', 
         'internal_sales_agent.EMP_ID as INT_EMP_ID) 

を使用することができますが、あなたがデータを取得する必要がある行の数百を持っているとき、それは本当のドラッグになります。

@foreach($Users as $User) 
<p> {{ $User->internal_sales_agent.EMP_ID }} </p> 
@endforeach 

明らかに、それはうまくいかないが、多くの列ではうまくいくだろうか?

+0

それはどんなエラーをスローですか? – RamAnji

答えて

1

私が考えることができる最も簡単な方法は、テーブルを比較し、どの列が同じであるかを書き留めることです。次に、選択クエリをこの方法で行うことができます。私は、その後の選択に私はすべてのテーブルを選択し、あなたのテーブルにエイリアスを与えた、とだけユニークな別名を持つ重複したカラムを宣言したのは何

$Users = User::select('users.*', 'e.*', 'ae.*', 'isr.*', 'isa.*', 'users.same_column as user_same_column', 'e.same_column as e.same_column')-> 
leftJoin('employee as e', 'users.user_employee_id', 'e.EMP_ID') 
->leftJoin('account_executive as ae', 'ae.EMP_ID', '=', 'e.EMP_ID') 
->leftJoin('independent_sales_rep as isr', 'isr.EMP_ID', '=', 'e.EMP_ID') 
->leftJoin('internal_sales_agent as isa', 'isa.EMP_ID', '=', 'e.EMP_ID'), 
->whereNotNull('users.user_employee_id') 
->get(); 

'users.same_column as user_same_column', 'e.same_column as e.same_column'

私は知っているから、mysqlは各テーブルのすべての列のプレフィックスを持っていませんが、少なくともこの方法では、重複する列を宣言するだけです

関連する問題