Json ответ отфильтрован по идентификатору из другой таблицы в Laravel - PullRequest
1 голос
/ 06 февраля 2020

В настоящее время у меня есть 2 разных views в моей базе данных.

Первый - view_project_percentage, где перечислены все проекты с его деталями

и view_projtask список заданий согласно спецификациям c проект

view_project_percentage

enter image description here

view_projtask

enter image description here

и у меня есть этот рабочий код

Мои модели

Project.php

 <?php

 namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Project extends Model
{
protected $table = "view_project_percentage";

public function tasks()
{
    return $this->hasMany(ProjectTask::class, 'projCode', 'proj_code')
    ->where('deleted',0);
}
}

и

ProjectTask.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class ProjectTask extends Model
{
protected $table = "view_projtask";

public function project()
{
    return $this->belongsTo(Project::class, 'proj_code', 'projCode')
    ->where('deleted',0)
    ->where('taskDeleted',0);
} 
}

и в моем Controller у меня есть это

 public function get_all_projtask()
{
    return response()->json(Project::with('tasks')->get());
}

Я получаю весь список проектов из кодов выше с этим ответом

 [
{
    "id": 9,
    "proj_code": "ZQQKVOTRJJNZ",
    "proj_title": "P12",
    "proj_desc": "Project Description 12",
    "target_man_days": 1000000,
    "issue": 0,
    "report": 1,
    "total_employee": 3,
    "hours_8": "4",
    "hours_6": "1.0",
    "hours_3": "0",
    "total_weight_progress": "5.00",
    "est_start_date": "2020-01-20 09:42:00",
    "est_end_date": "2020-01-20 21:42:00",
    "act_start_date": "2020-01-20 09:42:00",
    "act_end_date": "2020-01-20 21:42:00",
    "longitude": "121.07642460",
    "latitude": "14.56055010",
    "location": "Pasig, Metro Manila, Philippinae",
    "status": null,
    "deleted": 0,
    "by_id": 7,
    "updated_by": "Keigh Dee",
    "created_at": "2020-01-20 09:42:31",
    "updated_at": "2020-01-22 14:01:08",
    "tasks": [
        {
            "id": 40,
            "projCode": "ZQQKVOTRJJNZ",
            "taskCode": "OKIX19IR1DST",
            "total_task_weight": null,
            "taskWeight": "25.00",
            "plan_days": "5",
            "actual_days": "5",
            "task_title": "Task 1",
            "task_desc": "Description 1",
            "taskDeleted": 0,
            "deleted": 0,
            "by_id": 79,
            "updated_by": "Super Admin",
            "created_at": "2020-01-22 14:01:08",
            "updated_at": "2020-01-22 14:01:08"
        },
        {
            "id": 41,
            "projCode": "ZQQKVOTRJJNZ",
            "taskCode": "FZPRFIWOKBFQ",
            "total_task_weight": "5.00",
            "taskWeight": "25.00",
            "plan_days": "5",
            "actual_days": "5",
            "task_title": "Task 2",
            "task_desc": "Description 2",
            "taskDeleted": 0,
            "deleted": 0,
            "by_id": 79,
            "updated_by": "Super Admin",
            "created_at": "2020-01-22 14:01:08",
            "updated_at": "2020-01-22 14:01:09"
        },
        {
            "id": 39,
            "projCode": "ZQQKVOTRJJNZ",
            "taskCode": "J5X1FHCMVFSQ",
            "total_task_weight": null,
            "taskWeight": "50.00",
            "plan_days": "5",
            "actual_days": "5",
            "task_title": "Task 5",
            "task_desc": "Description 5",
            "taskDeleted": 0,
            "deleted": 0,
            "by_id": 79,
            "updated_by": "Super Admin",
            "created_at": "2020-01-22 14:01:08",
            "updated_at": "2020-01-22 14:01:08"
        }
    ]
},
 ........and projects more....

Я пытаюсь отфильтровать эти проекты на основе текущих auth()->user()->company_id, чтобы отфильтровать их. У меня есть таблица с именем tbl_emp_proj, где все projCode перечислены вместе с emp_id, что означает, что для каждого пользователя содержится несколько или один проект.

Это моя таблица

enter image description here

Я хочу показать ответ, только если проект предназначен для пользователя, использующего этот auth()->user()->company_id = emp_id, что запись из tbl_emp_proj равна deleted = 0

emp_id исходит от tbl_emp_proj

1 Ответ

2 голосов
/ 06 февраля 2020

Вы можете создать другую модель для проекта своего сотрудника.

<?php

...
class EmployeeProject extends Model
{
protected $table = 'tbl_emp_proj';

public function projects()
{
    return $this->hasMany(Project::class, 'projCode');
}

В вашем контроллере вы можете отфильтровать его, используя их идентификатор empployee и отношение отложенной загрузки.

Кстати, подробнее см. Документацию здесь

public function get_all_projtask()
{
    $useProject = EmployeeProject::where(['emp_id' =>auth()->user()->company_id])-firstOrFail();
    return response()->json($useProject->load('projects.tasks'));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...