2017-10-23 2 views
1

Ich verwende nicht eloquent, meine Modelle sind so.So erhalten Sie alle Datensätze in Laravel Modelle

class drivers extends Model 
{ 
} 

I Aufzeichnungen aller Fahrer angezeigt werden soll (ein Datensatz in jeder Zeile)

Mein Treiber Tabelle hat Feld (driver_id, name, tyre_id)

Mein Reifen Tabelle hat Feld (id, title)

Mein Bank Tabelle hat Feld (id, driver_id, bank)

ich meine Platte so sein wollen ...

Driver Id, Name, Bank Details, Tyre Title

100000111, Ayer, Available, GO

.. so weiter

Für Bankdetails, wenn driver_id einen Datensatz in Bank-Tabelle hat, sollte es verfügbar anzeigen andernfalls N/A.

$drivers= Drivers::get(); 
$myarray =(); 
foreach ($drivers as $d){ 
    $bank = Bank::where('driver_id',$d->driver_id)->first(); 
    $tyre = Tyre::where('id',$d->tyre_id)->first(); 
    $myarray[] = $d->driver_id; 
    $myarray[] = $d->name; 
    $myarray[] = isset($bank) ? "available" ; ''; 
    $myarray[] = $tyre->title; 

} 

Dies ist, was ich versucht habe, ich bin zu neu Laravel, wie kann ich dies in Laravel erreichen oder mit Abfrage wie DB Tabelle?

+0

Ok, so dass Sie im Grunde müssen entweder Nutzung beitritt oder Beziehungen, um die Tabellen miteinander zu verbinden. Außerdem möchten Sie '-> first()' nicht ausführen, da nur 1 Ergebnis abgerufen wird, müssen Sie '-> get();' ausführen und dann eine 'foreach()' - Schleife in Ihrer Blade-Datei verwenden. Ich kann nur annehmen, dass ID in Reifen mit der Treiber-ID übereinstimmt. – Option

Antwort

0

Laravel bietet zwei sehr nützliche Werkzeuge für die Durchführung von Datenbankoperationen eloquent und Query Builder. Es ist ratsam, so viel wie möglich mit eloquenten und ihren Beziehungen zu arbeiten, da es viele der üblichen Operationen erleichtert, die wir normalerweise durchführen müssen.

Nun, wenn Sie komplexere Abfragen machen möchten, können Sie Query Builder verwenden, auch ein Beispiel für Ihren Fall Query Builder mit so etwas wie das sein würde:

In Ihrem Controller Sie die Abfrage machen und passieren die Daten anzuzeigen:

$data = DB::table('driver') 
      ->leftJoin('bank', 'bank.driver_id','=', 'driver.driver_id') 
      ->join('tyre', 'tyre.id','=', 'bank.tyre_id') 
      ->select('driver.driver_id as id', 
        'driver.name', 
        'bank.id as bank_id', 
        'tyre.title') 
      ->groupBy('driver.driver_id') 
      ->get() 

und Ihrer Ansicht nach können Sie eine foreach-Schleife verwenden, um die Daten anzuzeigen (und Sie eine bedingte verwenden können, die Bank Feld anzuzeigen):

<table> 
    <thead> 
     <tr> 
      <th>Driver ID</th> 
      <th>Name</th> 
      <th>Bank Detail</th> 
      <th>Tyre Title</th> 
     </tr> 
    </thead> 
    <tbody> 
     @foreach($data as $item) 
      <tr> 
       <td>{{ $item->id }}</td> 
       <td>{{ $item->name }}</td> 
       <td>{{ isset($item->bank_id) ? "availible":"N/A" }}</td> 
       <td>{{ $item->title }}</td> 
      </tr>      
     @endforeach 
    </tbody> 
</table> 

ebenso empfehle ich Ihnen, die Dokumentation eloquent zu lesen und zu versuchen, es zu verwenden.

https://laravel.com/docs/5.5/queries

https://laravel.com/docs/5.5/eloquent

0

Der gute Weg, dies zu lösen ist Laravel Beziehungen hier der Link laravel documentation

Fahrer Tabelle auswählen als Basistabelle und Nutzungsbeziehungen, die anderen Tabellenfelder zu erhalten; array_push() Funktion drücken Werte Array

0

Ein anderer Weg, DB Fassade wird mit mit Verknüpfungen: So:

$users = DB::table('users') 
     ->join('contacts', 'users.id', '=', 'contacts.user_id') 
     ->join('orders', 'users.id', '=', 'orders.user_id') 
     ->select('users.*', 'contacts.phone', 'orders.price') 
     ->get(); 
Verwandte Themen