Отделы не отображаются в Laravel - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть две таблицы, отделы и пользователи. В одном отделе много пользователей. Один пользователь принадлежит к одному отделу. Я пытаюсь написать foreach l oop, чтобы отображать названия отделов с его пользователями, но я получаю эту ошибку .


Фасад \ Зажигание \ Исключения \ ViewException Неопределенная переменная: департаменты (Представление: C: \ xampp \ htdocs \ Laravel \ blog2 \ resources \ views \ admin \ dashboard.blade. php)

create_users_table


    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id');
            //$table->text('avatar');
            $table->string('name');
            $table->string('lastname');
            $table->string('phone');
            $table->string('jobtitle');
            $table->integer('department_id');
            $table->timestamps();
            $table->string('usertype')->nullable();
            $table->string('email');
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();

        });
    }

create_departments_table

public function up()
    {
        Schema::create('departments', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->timestamps();
        });
    }

Отдел. php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Department extends Model
{

    protected $table = 'departments';
    protected $fillable = [
        'name',
    ];
    protected $primaryKey = 'id';

public function department()
{
    return $this->belongsTo(Department::class);
}

}

Пользователь. php

<?php

namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{

    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $guarded = [];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
     public function department()
    {
        return $this->belongsTo(Department::class);
    }

}

dashboard.blade. php

 @extends ('layouts.master')

@section('title')
DASHBOARD | Admin
@endsection

@section('content') 

<div class="row">
  <div class="col-md-12">
    <div class="card">
      @if (session('status'))
      <div class="alert alert-success" role="alert">
        {{ session('status') }}
      </div>
      @endif
      <div class="card-header">
        <h4 class="card-title"> DASHBOARD </h4>
      </div>
      <div class="card-body">
        <div class="table-responsive">
          <table class="table">
            <thead class=" text-primary">
              <th>ID</th>
              <th>Name</th>
              <th>Last Name</th>
              <th>Department</th>
            </thead>
            <tbody>
            @foreach($departments as $department)
              <td> {{$department->name}}</td>
              @endforeach
            </tbody>
          </table>
        </div>
      </div>
    </div>
  </div>


  @endsection

  @section('scripts')

  @endsection 

DashboardController. php

class DashboardController extends Controller
{  public function index()
    {
      $users= User::all();
      foreach($users as $user)
      {
        echo $user->department->name;
        echo $user->name;
      }
   }
}

web. php


Route::get('/', function () {
    return view('welcome');
});


Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');


Route::group(['middleware' => ['auth','admin']], function  () {

    Route::get('/dashboard', function () {
        $users= User::all();
        $departments = Department::with('users')->get();
        dd($departments);
        return view('admin.dashboard',compact('departments','users')); 
    });
    //Route::get('/dashboard', "Admin\DashboardController@index");
   // Route::get('/dashboard{id}', "Admin\DashboardController@index");
    Route::get('/role-register','Admin\DashboardController@registered');
    Route::get('/role-edit/{id}', 'Admin\DashboardController@registeredit');   
    Route::put('/role-register-update/{id}', 'Admin\DashboardController@registerupdate');
    Route::delete('/role-delete/{id}', 'Admin\DashboardController@registerdelete');
    Route::post('/save-user', 'Admin\DashboardController@store');


    Route::get('/department', 'Admin\DepartmentController@index');
    Route::post('/save-department', 'Admin\DepartmentController@store');
    Route::get('/department-edit/{id}', 'Admin\DepartmentController@edit');
    Route::put('/department-update/{id}', 'Admin\DepartmentController@update');
    Route::delete('/department-delete/{id}', 'Admin\DepartmentController@delete');


});
Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

Я тоже это пробовал, но все так же.

<td> {{$department->name}}</td>

@foreach($departments->name as $department)
<td> {{$department}}</td>
@endforeach

Ответы [ 4 ]

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

ты можешь попробовать это? Посмотрите, изменит ли это ошибку?


use App\User;
use App\Department;

Route::get('/dashboard', function () {
    $users= User::all();
    $departments = Department::with('users')->get();
    return view('admin.dashboard',compact('departments','users')); 
});

закомментируйте это.

// Route::get('/dashboard', 'Admin\DashboardController@index' );

Также в вашем файле balde вам нужно изменить это, это даст вам весь отдел.

              @foreach($departments as $department)
              <td> {{$department->name}}</td>
              @endforeach

Обновление

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Department extends Model
{

    protected $table = 'departments';
    protected $fillable = [
        'name',
    ];
    protected $primaryKey = 'id';

public function users()
{
    return $this->belongsTo(User::class);
}

}
1 голос
/ 15 февраля 2020
Route::get('/dashboard', function () {
    return view('admin.dashboard');
});

Вот ваша проблема. Вы возвращаете представление панели мониторинга, не передавая ему список отделов.

Этот маршрут должен использовать DashboardController@index (и ваш закомментированный код должен быть некомментированным) - который получает список отделов и возвращает представление при передаче по списку.

Еще лучше, если вы использовали URL /departments и DepartmentsController ...

1 голос
/ 15 февраля 2020

В вашей сети. php, замените это:

Route::get('/dashboard', function () {
    return view('admin.dashboard');
});

на это:

Route::get('/dashboard', 'Admin\DashboardController@index' );

В вашем контроллере Dashboard замените это:

public function index()
{
    $users= User::all();
    $departments = Department::with('users')->first();
   // return view('admin.dashboard')->with('departments',$departments)->with('users',$users); 
    // $departments = Department::with('users')->where('users.department_id','=','departments.id')->first();
    // dd($departments);
     dd($users); 
    // return view('admin.dashboard',compact('departments','users'));        
}

с этим:

public function index()
{
    $users= User::all();
    $departments = Department::with('users')->get();
    return view('admin.dashboard',compact('departments','users'));        
}
0 голосов
/ 15 февраля 2020

Попробуйте изменить модель User, чтобы она имела следующее отношение:

public function department()
{
    return $this->belongsTo(Department::class);
}

В DashboardController измените его на следующее:

class DashboardController extends Controller
{
   public function index()
   {
     $users= User::all();
     foreach($users as $user)
     {
       echo $user->department->name;
       echo $user->name;
     }
  }
}

И обновите связанный маршрут:

Route::get('/dashboard', "Admin\DashboardController@index");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...