Как объединить три таблицы с Laravel и сохранить целостность данных

Я использую Laravel 5.7, и теперь я пытаюсь установить связь между тремя таблицами с именем:

  • Билеты (ПК — TicketID, FK — CampusID)
  • Кампус (ПК — КампусИД, ФК — Техид)
  • Пользователь (PK — TechID)

Я не думаю, что я настроил свои модели правильно, так как я показываю билет, где CampusID не принадлежит TechID, Я ищу лучшую практику по настройке Eloquent для сохранения целостности данных, чтобы я мог предотвратить любые отклонения. Как уже упоминалось выше, внешний ключ для Tickets следует ссылаться на Campus первичный ключ и Campus внешний ключ должен ссылаться на User основной ключ.

Вот мои Models:

Билет

protected $table='tickets';

public function user() {
return $this->belongsTo(User::class);
}

кампус

protected $table='campus';

public function user() {
return $this->belongsTo(User::class);
}

пользователь

public function campus()
{
return $this->hasMany(Campus::class, 'TechID');
}

public function ticket()
{
return $this->hasMany(Ticket::class, 'AssignedTo');
}

Вот мой контроллер:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Auth;
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 = Auth::user();
$campuses = Campus::where('TechID',$user->id)->pluck('CampusName');
$tickets = Ticket::all()->where('AssignedTo', $user->id);

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

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

0

Решение

я хотел бы использовать Нетерпеливая загрузка.

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

$campuses = $user->campuses->pluck('CampusName');
$tickets = Ticket::all()->where('AssignedTo', $user->id);

return view('home')->with([
'user' => $user,
'campuses'=>$user->campuses->pluck('CampusName'),
'tickets'=>$user->tickets]);
}

Вам необходимо обновить модель пользователя.

public function campuses()
{
return $this->hasMany(Campus::class, 'TechID');
}

public function tickets()
{
return $this->hasMany(Ticket::class, 'AssignedTo');
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector