How to display parent name in Laravel

Klearn :

I have a departments table in db with id,name, and parent.The parent is the id that corresponds to the parent root.Now i have displayed the id(parent id) but i want to show the name of the department that correspond with this id.I have tried the query at the departmentcontroller ,index function but it gives me this error Illuminate\Database\QueryException SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'departments' (SQL: select departments.id, departments.parent, departments.name from departments inner join departments on department.id = departments.parent where id = parent)

DepartmentController.php

<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use  App\Department;
use  App\User;
use Illuminate\Support\Facades\DB;

class DepartmentController extends Controller
{  

  public function usersdep($id)
  {
   $department = Department::with('users')->find($id);
   return view('admin.page-users')->with('users', $department->users);
  } 
   public function treeView()
  {
   $departments = Department::with('childs')->where('parent', 0)->get();  
   return view('admin.page',compact('departments'));
  } 

  public function index()
  {
    //$departments = \App\Department::all();  
    //return view('admin.department')->with('departments', $departments);
 return $departments =  DB::table('departments')
    ->join('departments', 'department.id', '=', 'departments.parent')
   ->select('departments.id','departments.parent','departments.name')->where('id','=','parent')->get();
  }

department.blade.php

@extends ('layouts.master')

@section('title')
Department Management | Admin
@endsection
@section('content')

<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">New department</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
        @if (session('status'))
        <div class="alert alert-success" role="alert">
          {{ session('status') }}
        </div>
        @endif
      </div>
      <form action="/save-department" method="POST">
        {{   csrf_field() }}
        <div class="modal-body">         
          <div class="form-group">
            <label for="recipient-name" class="col-form-label">Name</label>
            <input type="text" class="form-control" name="name" id="recipient-name">
          </div>
          <div class="form-group">
            <label for="recipient-name" class="col-form-label">ID</label>
            <input type="text" class="form-control" name="id" id="recipient-id">
          </div> 
          <div class="form-group">
            <label for="recipient-name exampleFormControlSelect2" class="col-form-label">Parent ID</label>
            <input type="text" class="form-control" placeholder="Choose the department parent id"name="parent" id="recipient-parent">

            <select multiple class="form-control"  name="parent" id="recipient-parent">
            @foreach($departments as $department)
               <option>{{ $department->parent }}</option>
               @endforeach 
            </select>

          </div>          
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
          <button type="submit" class="btn btn-primary">Save</button>
        </div>
      </form>
    </div>
  </div>
</div>
<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 my-4 text-center font-weight-light"> Department Management </h4>
      </div>
      <div class="card-body">
        <div class="table-responsive">
          <table class="table">
            <thead class=" text-primary">
              <th>Department</th>
              <button type="button" class="btn btn-primary float-right" data-toggle="modal" data-target="#exampleModal" >Add</button>              
              <thead class=" text-primary">
                <th>ID</th>
                <th>Name</th>
                <th>Parent ID</th>
                <th>Edit</th>
                <th>Delete</th>
              </thead>
            </thead>
            <tbody>
              @foreach($departments as $department)
              <tr>
                <td>{{ $department->id }}</td>  
                <td>{{ $department->name }}</td>  
                <td>{{ $department->parent }}</td> 
                <td>
                  <a href="{{  url('department-edit/'.$department->id) }}" class="btn btn-success">Edit</a>
                </td>       
                <td>
                  <form action="{{  url('department-delete/'.$department->id) }}" method="POST">
                    {{ csrf_field() }}
                    {{ method_field('DELETE') }}
                    <button type="submit"  class="btn btn-danger">Delete</button>
                  </form>                           
                </td>               
              </tr> 
              @endforeach  
              <a href="{{  url('/page') }}" class="btn btn-success">See the Departments and Employees</a>                                                     
            </tbody>           
          </table>  
        </div>
      </div>
    </div>
  </div>


  @endsection


  @section('scripts')


  @endsection

web.php

<?php
use App\User;
use App\Department;

use App\Events\WebsocketDemoEvent;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    broadcast(new WebsocketDemoEvent('some data'));
    return view('welcome');
});
Route::get('/page', function () {
    return view('admin.page');
});
Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');
Route::group(['middleware' => ['auth','admin']], function  () {
    Route::get('/role-register','Admin\DashboardController@registered');
    Route::delete('/role-delete/{id}', 'Admin\DashboardController@registerdelete');//delete user
    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');//edit department
    Route::put('/department-update/{id}', 'Admin\DepartmentController@update');
    Route::delete('/department-delete/{id}', 'Admin\DepartmentController@delete');//delete department  

    Route::get('/page-users/{id}', 'Admin\DepartmentController@usersdep');//show users  


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

Route::get('/chats', 'ChatsController@index');//chats
Route::get('/messages', 'ChatsController@fetchMessages');//messages
Route::post('/messages', 'ChatsController@sendMessage');//messages

Route::get('/dashboard', 'Admin\DashboardController@dbcheck');//DATABASE
Route::get('/user-edit/{id}', 'HomeController@registeredit');
Route::get('/role-edit/{id}', 'Admin\DashboardController@registeredit');//edit user
Route::put('/role-register-update/{id}', 'Admin\DashboardController@registerupdate');

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


Route::get('store_image', 'StoreImageController@index');
Route::post('store_image/insert_image', 'StoreImageController@insert_image');
Route::get('store_image/fetch_image/{id}', 'StoreImageController@fetch_image');
Route::get('/page',array('as'=>'jquery.treeview','uses'=>'Admin\DepartmentController@treeView'));
Route::get('/pageusers', 'Admin\DepartmentController@usersdep');

Department.php

<?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);
    return $this->hasMany(User::class,'department','id');
}

   //category has childs
   public function childs() {
    return $this->hasMany('App\Department','parent','id') ;
    /*
    childs() method with hasMany relationship. 
    hasMany relationship in Laravel tell us that they have multiple childs. 
    Here I am creating relationship based on parent and each category has their parent if parent id is 0 it means it is root category.*/
}
}

create_departments_table

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateDepartmentsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
public function up()
    {
        Schema::create('departments', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->integer('parent');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('departments');
    }
}

Amit Senjaliya :

You need to pass the correct department id.

public function index()
{         
     $departments =  DB::table('departments')->select('departments.*')->get();
     return view('admin.department', compact('departments'));
}

And view:

@foreach($departments as $department)
<tr>
    <td>{{ $department->id }}</td>  
    <td>{{ $department->name }}</td> 
    @foreach($departments as $parent)
        @if( $department->parent === $parent->id )
            <td>{{ $department->name }}</td>
        @endif
    @endforeach
<tr>
@endforeach

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=9786&siteId=1