2013-06-03 27 views
0

這個問題與Laravel有關,但也是通用數據庫設計,因爲我對這兩者都是新手。在Laravel Blade Template中使用Inner Join獲取數據庫信息

我做了一個數據庫,是這樣的:

  • ID
  • 姓氏
  • 地址
  • yadayada

地址

  • ID
  • 一號線
  • 城市
  • 狀態
  • 拉鍊
  • yadayada

有一個 「人」,它CA有一個地址。我已經這樣分開了,因爲公司(這個程序的另一部分)也會有地址,以及會議地點和POI也會有地址。我正在構建一個CRM類型系統。現在,我需要從數據庫中檢索信息。但有一個問題,因爲有2列名爲「id」。

我的內部加入如下。它的作品: $ people = DB :: table('people') - > join('address','address.id','=','people.address') - > get();

 return View::make('people.index') 
      ->with('people', $people); 

但是,當我去我的Laravel刀片模板一切正常,內連接成功,則顯示的數據,但我需要建立一個鏈接到ID,以便它可以被看作一個足智多謀的控制器鏈接在其自己的頁面上:

 @foreach ($people as $people) 
      <li> 
       <a href="{{ URL::to('people/' . $people->id) }}" class="thumbnail"> 
        <img src="" /> 
       </a> 
       <div class="caption"> 
        <p> 
         {{ $people->firstname }}<br /> 
         {{ $people->lastname }}<br /> 
         {{ $people->line1 }}<br /> 
         {{ $people->city }}<br /><br /> 

</p> 
      </li> 
     @endforeach 

由於它不知道使用哪個「id」,所以會返回非常瘋狂的結果。 (它使用地址表的ID與奇怪的結果)

  1. 有沒有辦法指定Laravel表名? (這不工作):

    <a href="{{ URL::to('people/' . $people->people.id) }}" class="thumbnail"> 
         <img src="" /> 
        </a> 
    
  2. 或者是一般的好做法數據庫不能在兩個不同的表使用「身份證」?在這種情況下,我可以重命名和問題將被修復

謝謝你的幫助。

+0

只是一個側面說明:雄辯會讓你的生活在這裏變得更輕鬆。 –

+0

@邁克安東尼我對拉拉維爾很新,但我想我正在使用雄辯。這裏是我的控制器 '代碼' \t \t $ =人DB ::表( '人') \t \t \t - >加入( '地址', 'address.address_id', '=', 'people.address') - >獲得(); \t \t \t \t \t返回查看::讓( 'people.index') \t \t \t - >使用( '人',$人); '/ code' – user2444007

回答

1

您可以隨時重命名id字段,但這不是必需的。您可以使用SELECT查詢來指定您的列。例如,SELECT address.id as address_id,people.id as people_id。這種方法的缺點是您需要指定每個列名稱。

+0

我最終看了一些其他資源,他們建議我有兩個字段:address_id映射到字段地址和people_id映射到字段的人。有點討厭,但我認爲數據庫設計更好。 – user2444007

1

爲了什麼,我可以在數據庫設計看見並加入條款,people表(people.address)的address列包含address表的ID。

如果是這樣,你可以在刀片視圖中使用people.address,像這樣:

  <a href="{{ URL::to('people/' . $people->address) }}" class="thumbnail"> 

而且,可能會更好地使用在這種情況下leftJoin

$people = DB::table('people') ->leftJoin('address', 'address.id', '=', 'people.address') ->get(); 
+0

這沒有奏效。但是我最終重命名了列,以便我可以使用映射到「地址」列的「address_id」。 我沒有嘗試左連接,但它可能會更好。我將不得不考慮一下MySQL的可怕部分 - 因爲我還沒有牢牢掌握它們。 – user2444007

+0

你可以看看這個http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html – dede