2016-09-29 5 views
1

私は、作成したカスタムリストに記事を追加するオプションをユーザーに与えたいと考えました。 (youtubeのプレイリスト機能のような)。Laravel:2つのテーブルを1つの結果に照会する手助けが必要

記事の中に既に記事がある場合は、チェックボックスをオンにして2回追加しないでください。

私のデータベーステーブル:リストを表示するための

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

私のコード。誰も私がリストがすでにを使用かどうかを確認するために2つのテーブルを照会するためのコードを理解するのに役立つことができれば

$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 no i dont –

答えて

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   
関連する問題