Как искать в нескольких таблицах данных в Laravel? - PullRequest
0 голосов
/ 08 ноября 2019

Я новичок в Laravel, как получить данные таблиц кратных значений для целей поиска фильтра? Я уже просматриваю данные, такие как идентификатор, название темы, стандартное имя, имя субъекта, но я ищу тему, в которой показано только название темы, но мне нужно все, что я ищу, чтобы показать все данные.

Это имя моей таблицы и то, что янужны столбцы (три таблицы разные)

1. Topics -> id, topic_name
2. Standards -> standard_name
3. subject -> subject_name

Это мой контроллер

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests\TopicRequest;
use App\Topic;
use App\Standard;
use App\Subject;
use DB;
use App\Http\Requests;
use Illuminate\Support\Facades\Input;
use App\Http\Controllers\Controller;

class TopicController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     **/
     public function index()
     {
          $topics = Topic::leftJoin('standards','topics.standard_id', '=', 'standards.id')->
                   leftJoin('subjects','topics.subject_id', '=', 'subjects.id')
         ->select('topics.*' ,'standards.standard_name','subjects.subject_name')
         ->orderBy('id', 'ASC')
         ->paginate(10);
         return view('topic.index', compact('topics'));
     }
    public function create()
    {
        $standards = Standard::select('id','standard_name')->paginate(10);
        $subjects = Subject::select('id','subject_name')->paginate(10);
        return view('topic.create', compact('standards','subjects'));
    }

    public function store(Request $request)
    {
        $this->validate($request, [
            'name'    =>  'required',
            'standard_id' => 'required',
            'subject_id' => 'required',
        ]);
        $topic = new Topic([
            'topic_name'    =>  $request->get('name'),
            'standard_id'    =>  $request->get('standard_id'),
            'subject_id'    =>  $request->get('subject_id'),
        ]);
        $topic->save();
        return redirect()->route('topic.index')->with('success', 'Data Added');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $topic = Topic::find($id);
        $standards = Standard::select('id','standard_name')->paginate(10);
        $subjects = Subject::select('id','subject_name')->paginate(10);
        return view('topic.edit', compact('topic', 'id','standards','subjects'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $topic = Topic::find($id);
        $topic->topic_name = $request->get('name');
        $topic->standard_id = $request->get('standard_id');
        $topic->subject_id = $request->get('subject_id');
        $topic->save();
        return redirect()->route('topic.index')->with('success', 'Data Updated');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        $topic = Topic::find($id);
        $topic->delete();
        return redirect()->route('topic.index')->with('success', 'Data Deleted');
    }
     public function search()
    {

        $search = Input::get('search');
        $topics = Topic::where( 'id', 'LIKE', '%' . $search . '%' )->orwhere( 'topic_name', 'LIKE', '%' . $search . '%' )->paginate(10);
        return view('topic.index',compact('topics'));


    }
}

1 Ответ

0 голосов
/ 08 ноября 2019

Если поиск в таблицах будет независимым друг от друга;Вы должны перечислить результаты отдельно, выполнив отдельный поиск по каждой таблице.

Если таблицы для поиска зависят от результатов поиска в других таблицах, вы не можете сделать это с помощью eloquent orm. Вы должны набрать raw sql.

Если это будет обычная процедура, я предлагаю вам выполнить поиск эластичного поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...