2017-06-07 2 views
0

J'ai une page qui affiche des liens avec le nom des entreprises qui sont récupérées dans la base de données comme ceci:données d'affichage de Laravel sur une page basée sur ID

Controller:

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]); 
} 

Vue:

@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 

Itinéraire:

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

J'ai ensuite ajouté une fonction où l'utilisateur clique sur un lien et il est pris à une page qui affiche toutes les données pour cette entreprise spécifique, mais il traite toutes les données, mais pour toutes les entreprises.

Controller:

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

Vue:

@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:

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

Maintenant, voici la question, comment ce code peut être modifié de sorte qu'une entreprise qui correspond soit bussiness -> nom ou business-> id est affiché. (Je suppose que le nom est pris lorsque l'utilisateur clique sur un nom

Une autre question est de savoir comment restreindre l'URL de sorte que si localhost/business/{nom} n'est pas égal à un business-> nom dans la base de données renvoie une erreur? au moment où il montre la page, peu importe ce que vous entrez.

Merci!

+0

A propos de votre deuxième question, vous n'utilisez aucun paramètre dans la fonction displayBusiness il retourne toutes les données que vous avez envoyés –

Répondre

1

Je ne sais pas si je comprends la question, mais peut-être le début d'une solution ...

Première vue:

@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 

second contrôleur:

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

Seconde vue :

<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> 

Deuxième Route:

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

Cela fonctionne, mais je veux montrer affaires nom dans l'URL au lieu de l'ID, mais je veux que la recherche utilise l'ID d'entreprise, est-ce possible? – Przemek

+0

Ok, dans ce cas vous devrez générer un slug du nom avec la méthode str_slug ($ name) et avoir une colonne slug dans la base de données.Ensuite, remplacez $ id par $ slug et interrogez votre modèle avec $ business = Business :: where ('slug', '=', $ slug) -> first(); ' – Smo

+0

où devrait aller la méthode str_slug? dois-je installer quelque chose pour l'utiliser? – Przemek

0

paramètres d'itinéraire sont disponibles dans la fonction de contrôleur en tant que paramètres. maintenant, vous pouvez construire une requête avec cette fonction. Si votre requête ne retourne pas Pour les résultats, vous pouvez renvoyer l'utilisateur à l'aperçu des activités

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

Je reçois: Essayer d'obtenir la propriété de non-objet – Przemek