我正在尝试制作票务系统,并且正在努力显示用户拥有的票证。现在,这种关系的工作方式是将票证分配给用户,然后将其分配给校园。由于校园是确定的,所以我实际上需要它是将票分配到校园的位置,并且必须将技术分配给该校园。技术人员只能看到属于该技术人员所分配的校园的门票。
从理论上讲,它应该像更改或重新定位用户一样工作,然后要做的就是更新TechID
列。表关系当前的工作方式如下:
我实际上曾经有一个类似的问题,但这是在我意识到之前的结构方式不是理想的设置之前。
以下是上一个问题的链接:Previous Question
这是我当前的控制者:
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');
}
}
我希望这能奏效,但实际上没有票证显示。用户可以有多个校园,所以我想知道这是否是混乱的地方。任何帮助都非常感激
答案 0 :(得分:2)
我建议在all / get之前执行where,以便在数据库级别而不是在PHP上进行过滤-all
之前的where
将使数据库返回所有值,然后使用Collection
过滤结果。另外,第二个查询需要whereIn,因为您要传递值数组:
$campuses = Campus::where('TechID', $user->id)->get();
$tickets = Ticket::whereIn('CampusID', $campuses->pluck('CampusID'))->get();