2016-01-25 24 views
3

在MySQL左連接我有2代表其中一個存儲的學生,另一個經理分別獲得相同的命名列後用雄辯

學生名姓, 最終管理者有

我還在學生表中存儲added_by以檢查哪位經理添加了學生。

與查詢我連接表

$students = \App\Student::with('payment')->with('discontinuities') 
       ->leftJoin('managers','students.added_by','=','managers.id') 
       ->get(); 

可以說,學生

名姓Added_by

喬恩·多伊1

和經理是

ID名姓

1李四

所以,當我加盟者2代表與查詢我上面給的。我的學生變成

Jane doe由於這兩個表中的名稱衝突。
由於兩列名稱相同,因此只需將管理員姓名覆蓋到學生的姓名。

我其實只能加入一些列在管理表,但是我需要這個名稱列與管理人員打印出added_by列名稱 ,當然我可以更改列名到別的表中的東西但是這將是太多的工作,因爲我不得不重新在我的應用程序中的每個查詢一個接一個,也從頭測試一切

所以我的問題是我如何加入這兩個表,並防止名稱相同的列的衝突?

回答

2

嘗試使用這樣的:

$students = \App\Student::with('payment')->with('discontinuities') 
    ->leftJoin('managers','students.added_by','=','managers.id') 
    ->select('students.*','managers.name as m_name','managers.surname as m_s_name','managers.other_column_if_needed','managers.another_column_if_needed') 
    ->get(); 

這樣你managers表的name列將被視爲m_namem_s_name

+0

哦,我不知道我可以改變列名後加入他們。謝謝 –

0

我的猜測是你應該在查詢的get()部分指定列名和表。

例如:

$students = \App\Student::with('payment')->with('discontinuities') 
    ->leftJoin('managers','students.added_by','=','managers.id') 
    ->get(['managers.Name', 'managers.Surname', 'students.name', 'students.surname']); 
0

我跑surname列將被視爲到今天早些時候的類似問題,'get'方法需要一個數組您希望將結果作爲參數的列名稱。因此,爲了防止衝突,你必須給這些列別名,像這樣:

$students = \App\Student::with('payment')->with('discontinuities') 
->Join('managers','students.added_by','=','managers.id') 
->get(['students.*', 'managers.name as managers_name', 'managers.surname as managers_surname', 'managers.other_column_if_needed']);