Как создать отношения между моделями для системы тикетов в laravel - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь создать систему заявок и работаю над тем, чтобы показать билеты, которые есть у пользователя.Теперь отношения работают так, что билеты назначаются пользователю, который затем назначается в кампусе.На самом деле мне нужно, чтобы билеты были назначены на кампус, так как кампус определен, и на этот кампус назначена технология.Технология должна видеть только билеты, принадлежащие кампусу, которому она назначена.

Теоретически, она должна работать так, как если бы пользователь был изменен или перемещен, тогда все, что нужно сделать, это обновить TechID столбец.Вот как в настоящее время работает соотношение таблиц:

  • Билеты (PK - TicketID, FK - CampusID)
  • Кампус (PK - CampusID, FK - TechID)
  • Пользователь (PK - TechID)

На самом деле у меня есть похожий вопрос, который я задавал ранее, но это было до того, как я понял, что то, как он был структурирован раньше, не идеальная настройка.

Вот ссылка на предыдущий вопрос: Предыдущий вопрос

Вот мой текущий контроллер:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Auth;

use App\User;
use App\Campus;
use App\Ticket;

class PagesController extends Controller
{

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    // Dashboard Page
    public function index()
    {
    $user = User::with(['campuses' => function($query) {
        $query->select(['TechID', 'CampusName']);
    },'tickets'])->where('id', Auth::id())->first();

    $campuses = Campus::all()->where('TechID', $user->id);
    $tickets = Ticket::all()->where('CampusID', $campuses->pluck('CampusID'));

    return view('home')->with([
       'user' => $user,
       'campuses'=>$campuses,
       'tickets'=>$tickets]);
    }
    // Queue Page
    public function Queue() {
        return view('Pages.Queue');
    }
    // Reports Page
    public function Reports() {
        return view('Pages.Reports');
    }
    // Search Page
    public function Search() {
        return view('Pages.Search');
    }
}

Я надеялся, что это сработает, но билетов нетна самом деле показатьУ пользователя может быть более одного кампуса, поэтому мне было интересно, может быть, здесь что-то не так.Любая помощь очень ценится

1 Ответ

0 голосов
/ 19 декабря 2018

Я бы предложил выполнить where перед all / get, чтобы фильтрация выполнялась на уровне базы данных вместо PHP - all до того, как where заставит базу данных вернуть все значения, затем используйтеCollection для фильтрации результатов.Кроме того, второй запрос требует whereIn, поскольку вы передаете массив значений:

$campuses = Campus::where('TechID', $user->id)->get();
$tickets = Ticket::whereIn('CampusID', $campuses->pluck('CampusID'))->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...