2016-05-26 5 views
1

Ich habe diese Methode server Daten für Bootstrap DatentabellenSuchabfrage nach Union

public function datatable(Request $request) 
{ 
    $organizations = DB::table('organizations') 
     ->join('customers', function ($join) 
     { 
      $join->on('organizations.id', '=', 'customers.customer_id') 
       ->where('customers.customer_class', '=', 'Organization'); 
     }) 
     ->select([ 
      'customers.id', 
      'organizations.name', 
     ]); 

    $contacts = DB::table('contacts') 
     ->join('customers', function ($join) 
     { 
      $join->on('contacts.id', '=', 'customers.customer_id') 
       ->where('customers.customer_class', '=', 'Contact'); 
     }) 
     ->select([ 
      'customers.id', 
      'contacts.name', 
     ]); 

    $customers = $organizations->union($contacts); 

    return Datatables::of($customers) 
     ->editColumn('name', function($customers) { 
      return '<a href="'.route('customers.show', $customers->id).'">'.$customers->name.'</a>'; 
     }) 
     ->make(true); 
} 

Ich denke, zu verarbeiten, was Tables tut führt WHERE LIKE Suche auf einer mitgelieferten Abfrage. Das Problem ist, dass wherecer ich versuche, Suche durchzuführen, gibt es zufällige Ergebnisse. Die Antwort here schlägt vor, dass ich die UNION in der FROM-Klausel haben müssen einzubetten, wie

SELECT * 
    FROM (SELECT * FROM TableA 
     UNION 
     SELECT * FROM TableB 
     ) AS U 
WHERE U.Col1 = ... 

Aber ich kann meinen Kopf nicht wickeln aroud, wie man das in einem Laravel Query Builder.

Falls relevant es ist, hier JS-Code

$(function() { 
    $('#customer-table').DataTable({ 
     processing: true, 
     serverSide: true, 
     bfilter: false, 
     ajax: "{{route('customers.datatable')}}", 
     columns: [ 
      { data: 'name'}, 
     ] 
    }); 

}); 
+0

Können Sie die Fehler anzeigen, die Sie erhalten, bitte – RiggsFolly

+0

Es gibt keine Fehler. Das Problem ist, dass Suchergebnisse nicht konsistent mit Suchzeichenfolge sind –

Antwort

0

Verwenden Sie es wie dieser Put mysql Abfrage als Ganzes, wie unten in Anführungszeichen,

DB: roh ('SELECT * FROM (SELECT * FROM TabelleA UNION SELECT * FROM TabelleB ) AS U WHERE U.Col1 = ... ') -> get();

Dies wird das gewünschte Ergebnis liefern.

+0

In Laravel 5.2 Klasse 'Illuminate \ Database \ Query \ Expression' hat keine Mothod' get' https://laravel.com/api/5.2/Illuminate/Database/ Query/Expression.html –

+0

Sie können hier für rohe Ausdruck überprüfen https://laravel.com/docs/5.2/queries –

+0

'DB: roh' funktioniert hier nicht. PDO ist die Antwort –