2016-09-29 3 views
1

Ich bin daran interessiert, Benutzern die Option zum Hinzufügen von Artikeln zu benutzerdefinierten Listen, die sie erstellen. (Wie youtubes Playlist-Funktion).Laravel: brauche Hilfe Abfrage von zwei Tabellen in ein Ergebnis

Ich möchte wissen, wie ein Kontrollkästchen neben einer Liste angezeigt wird, wenn der Artikel bereits darin vorhanden ist, so dass sie es nicht zweimal hinzufügen.

Meine Datenbanktabellen:

list  : | id | person_id | list_name | list_desc 
list_ref : | id | list_id | article_id 

Mein Code für Listen angezeigt werden.

$lists = Lists::where('person_id', Auth::user()->person_id)->get(); 
    @foreach($lists as $list) 
    <input type="checkbox" id="available_list" value="{{ $list->id }}"> 
    {{ $list->list_name }} 
    @endforeach 

Wenn jemand mir helfen, den Code zu verstehen könnten die beiden Tabellen abzufragen, um zu sehen, ob Liste bereits verwendet || Liste ist verfügbar.

+0

Haben Sie eine Viele-zu-Viele-Beziehung in Ihrem 'Listen'-Modell definiert? – Doom5

+0

@ Doom5 nein ich dont –

Antwort

1

Sie könnten einen rohen Ausdruck in Verbindung mit einem linken Seite kommen wie folgt aus:

$lists = DB::table('list')-> 
    leftJoin('list_ref', 'list_ref.list_id', '=', 'list.id')-> 
    select(DB::raw('list.*, IF(list_ref.list_id = list.id, 1, 0) used'))-> 
    where('person_id', Auth::user()->person_id)-> 
    get(); 

Die oben eine Liste, welche Zeilen, um herauszufinden, verwendet beitreten hat einen entsprechenden Schlüssel in der list_ref Tabelle. Das Ergebnis enthält ein Feld mit der Bezeichnung used, das angibt, ob der Eintrag eine Referenz in der Tabelle list_ref hat.

Sie nun in der Lage sein, sollten Sie wie folgt bilden zu generieren:

@foreach($lists as $list) 
<input type="checkbox" id="available_list" value="{{ $list->id }}" {{ $list->used ? "CHECKED" : "" }}> 
{{ $list->list_name }} 
@endforeach 
0

Erste Kiste Klasse für Anlage alle Daten

class HotelFacilities 
{ 
    public $facility_id; 
    public $facility; 
    public $status; 
} 

Get

$facilities = Facility::all(); 

Get, hier ist beispiels Benutzerbezogene Daten

$user_facilities = UserFacility::where('user_id', 3)->get(); 

//Here you add status 
$array_hotel_facility = array(); 
for($i=0; $i<count($facilities); $i++) 
{   
    $obj_hotel_facilities = new HotelFacilities; 
    $obj_hotel_facilities->facility_id = $facilities[$i]['id']; 
    $obj_hotel_facilities->facility = $facilities[$i]['facility']; 
    $obj_hotel_facilities->status = false; 
    for($j=0; $j<count($user_facilities); $j++) 
    { 
    if($user_facilities[$j]->facility_id == $facilities[$i]->id) 
    { 
     $obj_hotel_facilities->status = true; 
    } 
    } 
    //Pass this array to view 
    $array_hotel_facility[$i] = $obj_hotel_facilities; 
} 

//Pass to view 
return view('extranet.view_facilities')->with('facilities', $array_hotel_facility); 

//Generate UI like this   
@foreach($facilities as $facility) 
    <div class="form-group col-md-3"> 
    <div class="form-group">          
     <label> 
     <input type="checkbox" class="minimal" name="facilities[]" value="{{ $facility->facility_id }}" <?php if($facility->status){echo "checked";} ?>> 
     {{ $facility->facility }} 
     </label>      
    </div> 
    </div> 
@endforeach