如何在Laravel中创建票务系统模型之间的关系

时间:2018-12-19 19:59:36

标签: php laravel eloquent

我正在尝试制作票务系统,并且正在努力显示用户拥有的票证。现在,这种关系的工作方式是将票证分配给用户,然后将其分配给校园。由于校园是确定的,所以我实际上需要它是将票分配到校园的位置,并且必须将技术分配给该校园。技术人员只能看到属于该技术人员所分配的校园的门票。

从理论上讲,它应该像更改或重新定位用户一样工作,然后要做的就是更新TechID列。表关系当前的工作方式如下:

  • 门票(PK-门票ID,FK-校园ID)
  • 校园(PK-CampusID,FK-TechID)
  • 用户(PK-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');
    }
}

我希望这能奏效,但实际上没有票证显示。用户可以有多个校园,所以我想知道这是否是混乱的地方。任何帮助都非常感激

1 个答案:

答案 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();
相关问题