У меня есть таблица базы данных под названием «регистрация», которая отображает пользователей на роль, которую они играют в данном проекте.Например, пользователь может быть руководителем проекта в проекте А, а также обычным работником проекта в проекте В или супервизором в проекте С. Поэтому таблица «регистрации» имеет два внешних ключа, один из которых соединяет его с таблицей «пользователи» идругой к таблице "проектов".Я создал представление, в котором я хочу перечислить все проекты, связанные с конкретным пользователем.Тем не менее, я застреваю в работе с коллекциями, массивами и объектами Laravel, так как не могу понять, как предоставить представлению нужную коллекцию, чтобы он мог просто циклически отображать все проекты, которые есть у текущего пользователя.часть.При использовании приведенного ниже кода я передаю только последний проект представлению (т. Е. Последний проект, прошедший цикл foreach).Однако, как уже упоминалось, я требую, чтобы все его проекты были перечислены.
Я попытался создать массив для $ проектов в цикле foreach контроллера, но это, по сути, оборачивает коллекцию в еще одну оболочку массива.При добавлении -> toArray () это приводит к простому массиву, но я не могу получить доступ к атрибутам в представлении, так как это не объект.Может быть, кто-то может указать мне в правильном направлении.
Вот модели:
registration.php
<?php
namespace konsens24;
use Illuminate\Database\Eloquent\Model;
class Registration extends Model
{
...
public function user()
{
return $this->belongsTo(User::class);
}
public function project()
{
return $this->belongsTo(Project::class);
}
}
user.php
<?php
namespace konsens24;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
...
public function projects()
{
return $this->hasMany(Project::class, 'owner_id');
}
...
public function registrations()
{
return $this->hasMany(Registration::class, 'user_id');
}
}
project.php
<?php
namespace konsens24;
use Illuminate\Database\Eloquent\Model;
class Project extends Model
{
...
public function owner()
{
return $this->belongsTo(User::class);
}
public function registrations()
{
return $this->hasMany(Registration::class, 'project_id');
}
...
}
ProjectsController.php
<?php
namespace konsens24\Http\Controllers;
use Illuminate\Http\Request;
use konsens24\Project;
use konsens24\Mail\ProjectCreated;
use konsens24\User;
use konsens24\Registration;
use Illuminate\Support\Facades\DB;
class ProjectsController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function index()
{
$registrations = auth()->user()->registrations;
foreach ($registrations as $registration) {
$project_id = $registration->project_id;
$projects = Project::where('id', $project_id)->get();
foreach ($projects as $project){
echo $project->id; // just for testing purposes, it displays the correct info here
echo $project->title; // just for testing purposes, it displays the correct info here
}
}
return view('projects.index', compact('registrations', 'projects'));
}
...
}
index.blade.php
@extends('layouts.app')
@section('content')
<h1 class="title">Cases</h1>
<ul>
@foreach ($projects as $project)
<li>
<a href="/projects/{{ $project->id }}">
{{ $project->title }}
</a>
</li>
@endforeach
</ul>
@endsection