Laravel:需要帮助查询两个表到一个结果

时间:2016-09-29 07:41:47

标签: laravel

我有兴趣为用户提供将文章添加到他们创建的自定义列表的选项。 (例如youtube的播放列表功能)。

我想知道如何展示'已检查过'列表旁边的复选框,如果文章中已存在该文章,那么他们不会将其添加两次。

我的数据库表:

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

如果有人可以帮我理解查询两个表的代码,看看列表是否已经使用 || 列表可用

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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