Я использую Laravel 5.7, и теперь я пытаюсь установить связь между тремя таблицами с именем:
Я не думаю, что я настроил свои модели правильно, так как я показываю билет, где 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
колонка.
я хотел бы использовать Нетерпеливая загрузка.
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');
}
Других решений пока нет …