Я разрабатываю приложение laravel, которое имеет следующие красноречивые модели:
- App \ Models \ Dumpdb - Здесь я храню информацию обо всех файлах;
- App \ Models \ DumpDownloadHistory - Здесь я храню историю загрузок всех клиентских файлов;
Это Dumpdb таблица и модель -
// Database table
Schema::create('dumpdbs', function(Blueprint $table){
$table->bigIncreaments('id');
$table->string('hw')->nullable();
$table->string('hwtype')->nullable();
$table->string('hwtype2')->nullable();
$table->integer('kw')->nullable();
$table->string('dataset')->nullable();
$table->string('enginetype')->nullable();
$table->string('euro')->nullable();
$table->timestamps();
});
// Model
<?php
namespace App\Models;
use App\Models\DumpDownloadHistory;
use Illuminate\Database\Eloquent\Model;
class Dumpdb extends Model
{
public function DumpDownloadHistory(){
return $this->hasMany(DumpDownloadHistory::class);
}
}
DumpDownloadHistory таблица и модель -
// Table
Schema::create('dump_download_histories', function(Blueprint $table){
$table->bigIncreaments('id');
$table->unsignedBigInteger('user_id');
$table->unsignedBigInteger('file_id');
$table->string('dataset')->nullable();
$table->integer('downloadCost')->nullable();
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users');
$table->foreign('file_id')->references('id')->on('dumpdbs');
});
// Model
<?php
namespace App\Models;
use App\Models\Dumpdb;
use Illuminate\Database\Eloquent\Model;
class DumpDownloadHistory extends Model
{
protected $fillable = ['user_id', 'dataset', 'downloadCost', 'file_id'];
protected $table = 'dump_download_histories';
protected $primaryKey = 'id';
public function dumpDb(){
return $this->belongs_to(Dumpdb::class, 'file_id');
}
}
Мне нужно создать поисковый фильтр, где пользователь может искать файлы, которые он уже купил , Например, это все файлы из модели Dumpdb:
Вот как я хочу выглядеть, если пользователь нажал на флажок «Оплатил»:
Вот что я получаю:
Мой контроллер:
public function index(Request $request)
{
$dumpDb = Dumpdb::query();
// Search values
$hw = Dumpdb::select('hw')->distinct()->orderBy('hw', 'asc')->get();
$pld = Dumpdb::select('hwtype')->distinct()->get();
$hwtype = Dumpdb::select('hwtype', 'hwtype2')->distinct()->get();
$kw = Dumpdb::select('kw')->whereNotNull('kw')->distinct()->orderBy('kw', 'asc')->get();
$engine = Dumpdb::select('enginetype')->distinct()->get();
$euro = Dumpdb::select('euro')->where('euro', '!=', 'NULL')->distinct()->get();
// Search filters
if ($request->has('hw') && $request->input('hw') != '') {
$dumpDb = $dumpDb->where('hw', '=', $request->input('hw'));
}
if ($request->has('pld') && $request->input('pld') != '') {
$dumpDb = $dumpDb->where(function ($query) use ($request) {
$query->where('hwtype', $request->input('pld'))
->orWhere('hwtype2', $request->input('pld'));
});
}
if ($request->has('kw') && $request->input('kw') != '') {
$dumpDb = $dumpDb->where('kw', '=', $request->input('kw'));
}
if ($request->has('engine') && $request->input('engine') != '') {
$dumpDb = $dumpDb->where('enginetype', '=', $request->input('engine'));
}
if ($request->has('euro') && $request->input('euro') != '') {
$dumpDb = $dumpDb->where('euro', '=', $request->input('euro'));
}
if ($request->has('ds') && $request->input('ds') != '') {
$dumpDb = $dumpDb->where('dataset', 'LIKE', '%'. $request->input('ds') .'%');
}
// THIS FILTER NOT WORKING CORRECTLY
if ($request->input('hasPayed') == '1') {
$downloadHistory = DumpDownloadHistory::query();
$dumpDb = $downloadHistory->where('user_id', auth()->user()->id)->where('downloadCost', '!=', 'NULL');
}
$dumpDb = $dumpDb->orderBy('id', 'desc')->paginate(30);
return view('dumpDb.index', compact('hw', 'pld', 'kw', 'engine', 'euro', 'dumpDb', 'hwtype'));
Любая помощь будет очень полезно. Заранее спасибо.