Laravel - Показать весь проект от компании, в которой находится пользователь - PullRequest
2 голосов
/ 06 ноября 2019

У меня есть система, в которой я хочу показать все проекты компании. Эта конкретная компания должна быть той компанией, в которой находится зарегистрированный пользователь. Это звучит относительно просто, но я не могу понять, как с моей текущей настройкой базы данных, потому что ни у проектов, ни у пользователя нет project_ID, это потому, что ям с использованием промежуточной таблицы. Я построил свою структуру базы данных, как показано ниже:

  • Пользователи
    • company_id
  • Компании
    • id
  • Проекты
    • company_id
  • Project_User
    • user_id
    • project_id

При описанной выше настройке я установил все соединения с каждой моделью, кроме модели для Project_User. Эти модели перечислены ниже.

Модель пользователя

class User extends Authenticatable
{

    /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function role()
    {
        return $this->belongsTo(Role::class, 'role_id');
    }

    /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function job()
    {
        return $this->belongsTo(Job::class, 'job_id');
    }

    /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function company()
    {
        return $this->belongsTo(Company::class, 'company_id');
    }

    /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
     */
    public function projects()
    {
        return $this->belongsToMany(Project::class);
    }

    public function isAdmin()
    {

    }

    public function isCompanyOwner() {

        if(Auth::check())
            return(Auth::user()->job_id == 1);

        return false;
    }
}

Модель проекта

class Project extends Model
{
    /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
     */
    public function users()
    {
        return $this->belongsToMany(User::class);
    }

    /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function company()
    {
        return $this->belongsTo(Company::class);
    }
}

Компаниямодель

class Company extends Model
{
    /**
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function users()
    {
        return $this->hasMany(User::class);
    }

    /*
     *
     */
    public function projects()
    {
        return $this->hasMany(Project::class);
    }
}

Как я могу показать все проекты компании, в которой зарегистрированный пользователь, на моем домашнем экране? С этой текущей настройкой БД?

Текущий Контроллер получает ВСЕ проекты и ни один конкретный от конкретной компании.

Контроллер

public function index()
{
    $projects = Project::all();

    return view('Project.show', compact('projects'));
}

1 Ответ

3 голосов
/ 06 ноября 2019

Без технической поддержки это будет работать:

$request->user()->company->projects;

Получить компанию для текущего пользователя, а затем получить проекты для этой компании.

...