2017-06-07 66 views
0

我有一個頁面,顯示了企業名稱在數據庫中檢索像這樣的鏈接:laravel顯示數據的ID

控制器:

public function viewBusiness() { 
// Return our "website" object 
$business = Business::all(); 
// Pass the contents of the "html" property to the view 
return view('viewBusiness', ['business' => $business]); 
} 

查看:

@extends('master') @section('title', 'Live Oldham') @section('content') 
@section('content') 
      @foreach ($business as $businesses) 
     <a target="_blank" href="{{ url('business/' . $businesses->name) }}"> {{($businesses->name) }} 
     </a> @endforeach  
@endsection 

路線:

Route::get('business/list', '[email protected]')->name('viewBusiness'); 

然後,我添加了一個功能,用戶單擊一個鏈接並將其帶到顯示該特定業務的所有數據的頁面,但該頁面只顯示所有業務的所有數據。

控制器:

function displayBusiness() { 
    $business = Business::all(); 
    $address = Address::all(); 
    return view('displayBusiness', ['business' => $business, 'address' => $address]); 
} 

查看:

@foreach ($business as $businesses) 
    <p>{{$businesses->name}}</p> 
    <p>{{$businesses->email}}</p> 
@endforeach 
@foreach ($address as $addresses) 
    <p>{{$addresses->firstline_address}}</p> 
    <p>{{$addresses->secondline_address}}</p> 
    <p>{{$addresses->town}}</p> 
    <p>{{$addresses->city}}</p> 
    <p>{{$addresses->postcode}}</p> 
    <p>{{$addresses->telephone}}</p> 
@endforeach 

路線:

Route::get('business/{name}', '[email protected]')->name('displayBusiness'); 

現在,這裏的問題,如何可以將此代碼進行修改,以便只匹配任何經營業務,一個業務 - > name或business-> id被顯示。 (我猜的名字是當用戶點擊一個名字時被採取的

另一個問題是如何限制url,以便如果localhost/business/{name}不等於任何business->數據庫中的名稱返回錯誤?此刻它顯示的頁面,無論你輸入的內容。

謝謝!

+0

關於你的第二個問題,你是不是使用displayBusiness函數中的任何參數,以便它返回無論你送 –

回答

1

我不知道我理解的問題,但可能是一個解決方案的開始......

第一視點:

@extends('master') @section('title', 'Live Oldham') 
@section('content') 
      @foreach ($business as $businesses) 
     <a target="_blank" href="{{ url('business/' . $businesses->id) }}"> {{($businesses->name) }} 
     </a> @endforeach  
@endsection 

第二個控制器:

function displayBusiness($id) { 
    $business = Business::find($id); 
    $address = Address::find($id); 
    return view('displayBusiness', compact('business', 'address')); 
} 

第二個視圖:

<p>{{$business->name}}</p> 
    <p>{{$business->email}}</p> 
    <p>{{$address->firstline_address}}</p> 
    <p>{{$address->secondline_address}}</p> 
    <p>{{$address->town}}</p> 
    <p>{{$address->city}}</p> 
    <p>{{$address->postcode}}</p> 
    <p>{{$address->telephone}}</p> 

第二條路線:

Route::get('business/{id}', '[email protected]')->name('displayBusiness'); 
+0

這個工作的性質,但我想說明的業務名稱在URL而不是ID,但是我想要搜索使用業務ID,這是可能的嗎? – Przemek

+0

好的,在這種情況下,您將需要使用str_slug($ name)方法生成一個名稱的段落,並在數據庫中有一個slug列。接下來,用$ slug替換$ id,並用'$ business = Business :: where('slug','=',$ slug) - > first();' – Smo

+0

查詢你的模型,方法str_slug應該去哪裏?我需要安裝一些東西才能使用它? – Przemek

0

路由參數都在控制器功能可以作爲參數。現在你可以建立與此功能的查詢。如果查詢不返回任何結果,您都可以將用戶發回業務概覽。

function displayBusiness($name) { 
    $business = Business::where('name', $name)->orWhere('id', $name)->first(); 
    if ($business === null) 
    { 
     // No business with this name or id found. 
     // Redirect to businesses list page. 
    } 

    $address = Address::all(); 
    return view('displayBusiness', ['business' => $business, 'address' => $address]); 
} 
+0

我得到的所有數據:試圖讓非對象 – Przemek