类似的文章,并排除Laravel Eloquent的结果

时间:2018-06-25 08:31:25

标签: php laravel eloquent

我在Eloquent中使用Laravel 5.5,并且正在显示酒店房间。 在每个房间页面上,我要在底部显示其他房间,但要排除所选的房间。

例如,我们有4种类型的房间(单人间,双人间,三人间,单间)。 当用户进入双人房页面时,我想在底部显示其他三个房间(单人房,三人房,工作室),因此在这种情况下,必须排除“单人房”。

我已经创建了包含刀片文件的房间-其他,但是如何从数据库中获取数据并显示其他房间?

这是我的代码的一部分。

控制器:

public function room($slug) {
  $room = Room::whereTranslation('slug', $slug)->first();

  if($room->translate()->where('slug', $slug)->first()->locale != app()->getLocale()) {
    return redirect(route('room', $room->translate()->slug));
  }
  return view('room', compact('room'));
}

路线:

Route::get('/room/{slug}', 'RoomsController@room')->name('room');

查看:

@extends('layouts.front')

@section('content')
  <div class="main room">
    <div class="header-image"></div>
    <div class="container">
      <div class="top text-center">
        <div class="title"><h2>{{ $room->title }}</h2></div>
        <div class="subtitle"><h4>{{ $room->subtitle }}</h4></div>
      </div>
      <div class="bottom">
        <div class="row">
          <div class="col-sm-6">
            <div class="image">
              <img src="{{ Storage::url($room->image) }}" />
            </div>
          </div>
          <div class="col-sm-6">
            <div class="body">{!! $room->body !!}</div>
          </div>
        </div>
      </div>
      @include('includes.rooms-other')
    </div>
  </div>
@endsection

从代码中可以看到,我已将“其他房间”视图创建为包含文件,但是如何显示其他房间的数据呢?

编辑:我知道我可以在控制器中创建另一个方法并使用相同的视图调用路由,但是如何获得排除的结果? 我需要一个代码。

1 个答案:

答案 0 :(得分:1)

您可以在控制器中这样做:

public function room($slug) {
    $room = Room::whereTranslation('slug', $slug)->first();
    $other_rooms = Room::where('id', '!=' , $room->id)->get();

    if($room->translate()->where('slug', $slug)->first()->locale != app()->getLocale()) {
          return redirect(route('room', $room->translate()->slug));
    }
    return view('room', compact('room', 'other_rooms'));
}