mirror of https://github.com/Devoalda/LaDo.git
fix(Eloquent relationship notation):
Removed: - Unwanted DB calls Modified: - Controllers and views to use model relationships
This commit is contained in:
parent
917db15e78
commit
b4948481e8
|
@ -41,12 +41,11 @@ class ProjectController extends Controller
|
|||
|
||||
$user = User::find(auth()->user()->id);
|
||||
$projects = $user->projects()->paginate(4);
|
||||
// Aggregate all todos for all projects
|
||||
|
||||
$todos = $user->todos()
|
||||
->map(function ($todo) {
|
||||
return Todo::find($todo->id);
|
||||
});
|
||||
// Aggregate all todos for all projects
|
||||
$todos = $user->projects->map(function ($project) {
|
||||
return $project->todos;
|
||||
})->flatten();
|
||||
|
||||
if ($request->ajax()) {
|
||||
$view = view('project.load-projects', compact('projects'))->render();
|
||||
|
@ -60,7 +59,6 @@ class ProjectController extends Controller
|
|||
'projects' => $projects,
|
||||
'todos' => $todos->whereNull('completed_at')->values(),
|
||||
'completed' => $todos->whereNotNull('completed_at')
|
||||
->whereBetween('completed_at', [strtotime('today midnight'), strtotime('today midnight + 1 day')])
|
||||
->values(),
|
||||
]);
|
||||
}
|
||||
|
|
|
@ -50,7 +50,10 @@ class ProjectTodoController extends Controller
|
|||
return new TodoResource($todos);
|
||||
}
|
||||
|
||||
$todos = $project->todos;
|
||||
// "Todo index" shows all Todos for all Project
|
||||
$todos = $user->projects->map(function ($project) {
|
||||
return $project->todos;
|
||||
})->flatten();
|
||||
|
||||
return view('todo.index', [
|
||||
'todos' => $todos->whereNull('completed_at')->values(),
|
||||
|
|
|
@ -13,13 +13,11 @@ class CompletedTodo extends Component
|
|||
|
||||
public function mount()
|
||||
{
|
||||
$this->todo_completed_count = DB::table('todos')
|
||||
->join('project_todo', 'todos.id', '=', 'project_todo.todo_id')
|
||||
->join('project_user', 'project_todo.project_id', '=', 'project_user.project_id')
|
||||
->where('project_user.user_id', '=', Auth::user()->id)
|
||||
->whereDate('due_end', '<=', strtotime('today midnight'))
|
||||
->whereNotNull('completed_at')
|
||||
->count();
|
||||
$user = auth()->user();
|
||||
$this->todo_completed_count = $user->projects->map(function ($project) {
|
||||
return $project->todos->whereNotNull('completed_at')->count();
|
||||
})->sum();
|
||||
|
||||
}
|
||||
|
||||
public function render()
|
||||
|
|
|
@ -12,13 +12,11 @@ class IncompleteTodo extends Component
|
|||
|
||||
public function mount()
|
||||
{
|
||||
$this->incomplete_count = DB::table('todos')
|
||||
->join('project_todo', 'todos.id', '=', 'project_todo.todo_id')
|
||||
->join('project_user', 'project_todo.project_id', '=', 'project_user.project_id')
|
||||
->where('project_user.user_id', '=', Auth::user()->id)
|
||||
->whereDate('due_end', '<=', strtotime('today midnight'))
|
||||
->whereNull('completed_at')
|
||||
->count();
|
||||
$user = Auth::user();
|
||||
|
||||
$this->incomplete_count = $user->projects->map(function ($project) {
|
||||
return $project->todos->where('completed_at', null)->count();
|
||||
})->sum();
|
||||
|
||||
}
|
||||
public function render()
|
||||
|
|
|
@ -12,17 +12,24 @@ class PomoCount extends Component
|
|||
|
||||
public function mount(){
|
||||
$user = User::find(auth()->user()->id);
|
||||
$todos = $user->todos()->map(function ($todo) {
|
||||
$todo = \App\Models\Todo::find($todo->id);
|
||||
$todo->pomos = Pomo::where('todo_id', $todo->id);
|
||||
return $todo;
|
||||
});
|
||||
$todos = $user->projects->map(function ($project) {
|
||||
return $project->todos;
|
||||
})->flatten();
|
||||
|
||||
// $todos = $user->todos()->map(function ($todo) {
|
||||
// $todo = \App\Models\Todo::find($todo->id);
|
||||
// $todo->pomos = Pomo::where('todo_id', $todo->id);
|
||||
// return $todo;
|
||||
// });
|
||||
|
||||
// Get the average pomo count per todo
|
||||
$ave_pomo_count = $todos->avg(function ($todo) {
|
||||
return $todo->pomos->count();
|
||||
});
|
||||
$this->ave_pomo_count = $ave_pomo_count ?? 0;
|
||||
$ave_pomo_count = 0;
|
||||
foreach ($todos as $todo) {
|
||||
$ave_pomo_count += $todo->pomo->count();
|
||||
}
|
||||
$ave_pomo_count = $ave_pomo_count / $todos->count();
|
||||
|
||||
$this->ave_pomo_count = $ave_pomo_count;
|
||||
}
|
||||
|
||||
public function render()
|
||||
|
|
|
@ -19,12 +19,11 @@ class PomoTime extends Component
|
|||
$user = User::find(auth()->user()->id);
|
||||
|
||||
// Get all pomos and calculate the average time spent per todo (due_end - due_start)/count/total pomos
|
||||
$pomos = $user->pomos();
|
||||
$pomos = $pomos->map(function ($pomo) {
|
||||
$pomo->todo = Todo::find($pomo->todo_id);
|
||||
$pomo->project = Project::find($pomo->todo->project_id);
|
||||
return $pomo;
|
||||
});
|
||||
$pomos = $user->projects->map(function ($project) {
|
||||
return $project->todos->map(function ($todo) {
|
||||
return $todo->pomo;
|
||||
});
|
||||
})->flatten();
|
||||
|
||||
$total_pomos = $pomos->count();
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
namespace App\Http\Livewire\Todo;
|
||||
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Livewire\Component;
|
||||
use App\Models\Todo;
|
||||
|
@ -21,26 +22,20 @@ class TodaysTodo extends Component
|
|||
|
||||
public function render()
|
||||
{
|
||||
$todos = DB::table('todos')
|
||||
->join('project_todo', 'todos.id', '=', 'project_todo.todo_id')
|
||||
$user = auth()->user();
|
||||
|
||||
$todos = Todo::join('project_todo', 'todos.id', '=', 'project_todo.todo_id')
|
||||
->join('project_user', 'project_todo.project_id', '=', 'project_user.project_id')
|
||||
->where('project_user.user_id', '=', auth()->user()->id)
|
||||
->whereDate('due_end', '<=', strtotime('today midnight'))
|
||||
->where('project_user.user_id', '=', $user->id)
|
||||
->whereDate('due_end', '<=', now()->toDateString())
|
||||
->whereNull('completed_at')
|
||||
->orderBy('due_end', 'asc')
|
||||
->paginate($this->perPage);
|
||||
|
||||
|
||||
$todos->transform(function ($todo) {
|
||||
return Todo::find($todo->id);
|
||||
});
|
||||
|
||||
|
||||
$incomplete_count = DB::table('todos')
|
||||
->join('project_todo', 'todos.id', '=', 'project_todo.todo_id')
|
||||
$incomplete_count = Todo::join('project_todo', 'todos.id', '=', 'project_todo.todo_id')
|
||||
->join('project_user', 'project_todo.project_id', '=', 'project_user.project_id')
|
||||
->where('project_user.user_id', '=', auth()->user()->id)
|
||||
->whereDate('due_end', '<=', strtotime('today midnight'))
|
||||
->where('project_user.user_id', '=', $user->id)
|
||||
->whereDate('due_end', '<=', now()->toDateString())
|
||||
->whereNull('completed_at')
|
||||
->count();
|
||||
|
||||
|
|
|
@ -29,19 +29,4 @@ class Pomo extends Model
|
|||
return $this->belongsTo(Todo::class);
|
||||
}
|
||||
|
||||
|
||||
public function user(): Collection
|
||||
{
|
||||
return DB::table('users')
|
||||
->join('project_user', 'users.id', '=', 'project_user.user_id')
|
||||
->join('projects', 'project_user.project_id', '=', 'projects.id')
|
||||
->join('project_todo', 'projects.id', '=', 'project_todo.project_id')
|
||||
->join('todos', 'project_todo.todo_id', '=', 'todos.id')
|
||||
->join('pomos', 'todos.id', '=', 'pomos.todo_id')
|
||||
->where('pomos.id', '=', $this->id)
|
||||
->select('users.*')
|
||||
->get();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -38,19 +38,6 @@ class Todo extends Model
|
|||
"updated_at" => "integer",
|
||||
];
|
||||
|
||||
public function user(): Collection
|
||||
{
|
||||
// Select User given Todo
|
||||
return DB::table('users')
|
||||
->join('project_user', 'users.id', '=', 'project_user.user_id')
|
||||
->join('projects', 'project_user.project_id', '=', 'projects.id')
|
||||
->join('project_todo', 'projects.id', '=', 'project_todo.project_id')
|
||||
->join('todos', 'project_todo.todo_id', '=', 'todos.id')
|
||||
->where('todos.id', '=', $this->id)
|
||||
->select('users.*')
|
||||
->get();
|
||||
}
|
||||
|
||||
public function projects(): BelongsToMany
|
||||
{
|
||||
return $this->belongsToMany(
|
||||
|
|
|
@ -58,33 +58,10 @@ class User extends Authenticatable
|
|||
return $this->belongsToMany(Project::class, projectUser::class, 'user_id', 'project_id');
|
||||
}
|
||||
|
||||
public function todos(): Collection
|
||||
{
|
||||
return DB::table('todos')
|
||||
->join('project_todo', 'todos.id', '=', 'project_todo.todo_id')
|
||||
->join('projects', 'project_todo.project_id', '=', 'projects.id')
|
||||
->join('project_user', 'projects.id', '=', 'project_user.project_id')
|
||||
->join('users', 'project_user.user_id', '=', 'users.id')
|
||||
->where('users.id', '=', $this->id)
|
||||
->select('todos.*')
|
||||
->get();
|
||||
}
|
||||
|
||||
public function pomo(): HasManyThrough
|
||||
{
|
||||
return $this->hasManyThrough(Pomo::class, Todo::class);
|
||||
}
|
||||
|
||||
public function pomos(): Collection
|
||||
{
|
||||
return DB::table('pomos')
|
||||
->join('todos', 'pomos.todo_id', '=', 'todos.id')
|
||||
->join('project_todo', 'todos.id', '=', 'project_todo.todo_id')
|
||||
->join('projects', 'project_todo.project_id', '=', 'projects.id')
|
||||
->join('project_user', 'projects.id', '=', 'project_user.project_id')
|
||||
->join('users', 'project_user.user_id', '=', 'users.id')
|
||||
->where('users.id', '=', $this->id)
|
||||
->select('pomos.*')
|
||||
->get();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue