首页 > 解决方案 > 与 Laravel Eloquent 类似的文章和排除结果

问题描述

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

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

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

这是我的代码的一部分。

控制器:

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

正如您从代码中看到的那样,我将“房间-其他”视图创建为包含文件,但是如何显示其他房间的数据?

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

标签: phplaraveleloquent

解决方案


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

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'));
}

推荐阅读