Laravel dapatkan projek terkini yang diisih mengikut tarikh tamat projek
P粉773659687
P粉773659687 2023-09-11 21:38:55
0
1
430

Saya perlu menulis skop untuk mendapatkan item untuk pengguna yang sedang log masuk. Jika pengguna yang sedang log masuk mempunyai kebenaran melihat semua projek maka saya ingin menyenaraikan semua projek dalam sistem, jika tidak, saya ingin menyenaraikan projek yang dibuat oleh pengguna yang log masuk atau diberikan oleh tugas dalam pengguna. Saya cuba menulis julat berikut dalam modelProject:

public function scopeForUser($query, User $user) { if ($user->can('view-all-projects')) { return $query->withBudget() ->with(['customer:id,company_id' => ['company:id,name']]) ->latest() ->orderBy('end_date', 'desc'); } return $query->withBudget() ->with(['customer:id,company_id' => ['company:id,name']]) ->where(function ($query) use ($user) { $query->where('user_id', $user->id) ->orWhereHas('users', function ($query) use ($user) { $query->where('users.id', $user->id); }) ->orWhereHas('tasks', function ($query) use ($user) { $query->where('user_id', $user->id); }); }) ->latest() ->orderBy('end_date', 'desc'); }
Rangkaian

withBudgetadalah seperti berikut

public function scopeWithBudget($query) { return $query->addSelect(['budget' => function ($subQuery) { $subQuery->selectRaw('sum(cost)') ->from('tasks') ->whereColumn('project_id', 'projects.id'); }]); }

Setakat ini ia berfungsi, tetapi ia tidak tepat. Kadang-kadang apabila saya tahu pengguna yang log masuk adalah pentadbir dan mempunyai semua kebenaran, ia hanya mendapat beberapa item dan item juga disusun mengikut tertib menurun, saya rasacreated_atbukannyatarikh_akhir< /代码>

Ada idea bagaimana untuk menyelesaikan masalah ini? Jika anda memerlukan maklumat lanjut sila beritahu saya

EditJika saya mengalih keluar beberapa pertanyaan, coretan kod berikut berfungsi:

if ($user->hasPermissionTo('view-all-projects')) { return $query->latest(); } else { return $query->where(function ($query) use ($user) { $query->where('user_id', $user->id) ->orWhereIn('id', function ($query) use ($user) { $query->select('project_id') ->from('tasks') ->where('user_id', $user->id); }); }); }

Kemudian saya mendapatkan item melalui:

user())->get(); return view('projects.index', ['projects' => $projects, 'projectsCount' => $projects->count()]); } }

Sementara coretan kod di atas berfungsi, ia tidak melakukan satu perkara (lupakan tentang pemuatan bersemangat buat masa ini) tetapi saya perlu menyenaraikan item berdasarkan baki masa sebelum tarikh akhir. Oleh itu, ia harus menyenaraikan dalam pesanan item yang akan dibayar tidak lama lagi, item yang mempunyai lebih masa, item yang sudah perlu dibayar

P粉773659687
P粉773659687

membalas semua (1)
P粉258788831

Saya rasa masalah pesanan mungkin anda sedang membuat panggilanlatest()以及orderBy('end_date', 'desc')作为latest()工作于created_at。您可能根本不需要latest()kerana anda masih menambah pesanan anda sendiri.

Bagi isu skop pengguna, saya tertanya-tanya sama ada penggunaan duaorWhereHas调用而不是whereHasorWhereHas 可能会在scopeForUseranda menyebabkan masalah.

Mungkin pendekatan lain boleh kelihatan seperti ini:

public function scopeForUser($query, User $user) { if ($user->can('view-all-projects')) { return $query->withBudget() ->with(['customer:id,company_id' => ['company:id,name']]) ->orderBy('end_date', 'desc'); } return $query->withBudget() ->with(['customer:id,company_id' => ['company:id,name']]) ->where('user_id', $user->id) ->orWhere(function ($query) use ($user) { $query->whereHas('users', function ($query) use ($user) { $query->where('users.id', $user->id); }) ->orWhereHas('tasks', function ($query) use ($user) { $query->where('user_id', $user->id); }); }) ->orderBy('end_date', 'desc'); }
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!