2016-09-29 76 views
1

我感興趣的是讓用戶選擇添加文章到他們創建的自定義列表。 (如youtube的播放列表功能)。Laravel:需要幫助查詢兩個表到一個結果

我想知道如何顯示列表旁邊的「已選中」複選框,如果文章已經存在,那麼它們不會添加兩次。

我的數據庫表:

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

我的顯示列表的代碼。

$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 

如果有人可以幫助我理解的代碼來查詢兩個表,看是否名單已經使用 || 可用列表

+0

您是否有在'Lists'模型中定義的多對多關係? – Doom5

+0

@ Doom5不,我不 –

回答

1

你可以在左側配合使用原始表達式加入這樣的:上面

$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(); 

使用加入找出哪些錶行已在list_ref表中對應的按鍵。結果將包含一個名爲used的字段,該字段將告知list_ref表中的條目是否有引用。

您現在應該能夠生成你形成這樣的:

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

第一板條箱類,這裏是例如用於設施

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

獲取所有數據

$facilities = Facility::all(); 

獲取用戶相關數據

$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