2016-07-26 45 views
0

我試圖在我的視圖中顯示一個表格,內容包含來自我的位置表(地址,城市等...)和資源表(名稱,描述)的信息,它們通過ID鏈接一個ResourceLocation表。這是我到目前爲止有:如何通過視圖中的表顯示hasMany()關係。

資源控制器

.... 
 

 
public function resource() 
 
{ 
 
    $resources = Resource::all(); 
 
    return view('pages.resource', compact('resources')); 
 
} 
 

 
public function location() 
 
{ 
 
    $locations = Location::all 
 
    return view (compact('locations')); 
 
} 
 

 
public function resourcelocation() 
 
{ 
 
    $resourcelocations = ResourceLocation::all(); 
 
    return view (compact ('resourcelocations')); 
 
} 
 

 
...
ResourceLocation型號

/** 
 
* Class ResourceLocation 
 
*/ 
 
class ResourceLocation extends Model 
 
{ 
 
    ... 
 

 
    public function resource() 
 
    { 
 
     return $this->belongsTo('App\Models\Resource'); 
 
    } 
 

 
    public function location() 
 
    { 
 
     return $this->belongsTo('App\Models\Location'); 
 
    }  
 
}

資源模型

/** 
 
* Class Resource 
 
*/ 
 
class Resource extends Model 
 
{ 
 

 
... 
 

 
/** A resource can have many locations */ 
 

 
    public function location() 
 
    { 
 
    return $this->hasMany('App\Models\ResourceLocation'); 
 
    }  
 
}
選址模型

/** 
 
* Class Location 
 
*/ 
 
class Location extends Model 
 
{ 
 
... 
 
    public function resource() 
 
    { 
 
     return $this->hasMany('App\ResourceLocation'); 
 
    } 
 
}
resource.blade.php

<table> 
 
    <tr> 
 
     <th>Resource Name</th> 
 
     <th>Description</th> 
 
     <th>Address</th> 
 
     <th>City</th> 
 
     <th>Zip Code</th> 
 
     <th>County</th> 
 
    </tr> 
 
    @foreach ($resourcelocations as $resourcelocation) 
 
    <tr> 
 
     <td> {{ $resourcelocation->id }}</td> 
 
     <td> 
 
     @foreach ($resourcelocation->resources as $resource) 
 
      {{ $resource->Name }}, 
 
     @endforeach 
 
     </td> 
 
     <td> 
 
     @foreach($resourcelocations->locations as $location) 
 
      {{ $location->City }} 
 
        @endforeach 
 
     </td> 
 
     </tr> 
 
     @endforeach 
 
</table>

我只是想補充一兩欄,看看它是否是工作,但我一直在resourcelocations得到一個不確定的變量,仍試圖總結我的周圍laravel頭的關係是如何工作的,所以也許我的邏輯搞砸了。任何幫助將是偉大的!

謝謝。

回答

1

您的關係似乎存在一些混淆。我認爲它可以用你擁有的方式工作,但你使它變得比它需要的更困惑。

首先,從刪除ResourceLocation模型開始。您可以直接聯繫resourceslocations,而不需要中間模型(儘管您仍然需要該表格)。這就是所謂的歸屬關係。

我還建議,當你有一個可以返回許多記錄的關係(例如,如果資源可以有很多位置),你應該命名與這些locations而不是location相關的方法。

有了這些想法,你Resource模型得到...

public function locations() 
{ 
    return $this->belongsToMany('App\Models\Location', 'ResourceLocation'); 
} 

當我把'ResourceLocation',這應該是你命名你的數據透視表什麼的。

同樣爲您的Location型號接收。

public function resources() 
{ 
    return $this->belongsToMany('App\Models\Resource', 'ResourceLocation'); 
} 

現在,應該可以大大簡化,我們剛剛更換4點關係的方法和3種型號爲2點的關係的方法和2種型號。

現在對於您的控制器來說,使用預先加載來獲取所有資源位置會更有效率。

$resources = Resource::with('locations')->get(); 

而且在你看來...

@foreach ($resources as $resource) 
    @foreach ($resource->locations as $location) 
     <tr> 
      <td>{{ $resource->id }}</td> 
      <td>{{ $location->name }}</td> 
     </tr> 
    @endforeach 
@endforeach 
+0

謝謝。我不知道你可以通過使用該語句來加入這兩個表,我正在考慮SQL連接語句。 **編輯**沒關係,命名空間不同於。進展,我看到表格,只是沒有數據。 – ph0bolus

+0

'belongsToMany'函數爲ID添加了附加參數。如果你和Laravel期望的不同,它可能不會返回數據。你的'ResourceLocation'表中你的id的名字是什麼? – user3158900

+0

對不起,我明白了。而不是'{{$ resource-> name}}'它是我的數據庫中的'Name',所以一切都只是空白。在我全部使用它們之後,數據顯示正確。再次感謝! – ph0bolus

0

在你的資源控制器你沒有通過任何resourcelocation變量,因爲我只能看到resources已被調用。嘗試聲明此行return view('pages.resource', compact('resources'));

在數組變量要獲得hasMany的第一個元素,你可以在下面嘗試:

$resource->location()->first(); 

可以將數據發送到視圖之前使用dd(variable_name)獲得更好的主意您的數據如何管理