user3189881
user3189881

Reputation: 65

How to join the two table in Laravel 5.4

I am learning Laravel 5.4. But I have stuck in one place.

I have two tables coursenames and branchnames.

branchnames table contains: id, branchname, course_id

coursenames table contains: id, coursename

coursename has a unique name, and course_id of branchnames has an id of coursename, which can be repeated.

My BranchNameController is:

public function index()
{
    $branchname = branchname::all();
    $coursename = coursename::all();
    return view('admin.branchname',compact('branchname','coursename'));
}

branchname.blade.php is:

<tbody>
   @foreach($branchname as $branchnames)
   <tr>
      <td>{{ $branchnames->branchname }}</td>
      <td>{{ $branchnames->course_id }}</td>
   </tr>
   @endforeach     
</tbody>

I want to show course name instead of {{ $branchnames->course_id }}. How it can be done?

model branchname.php is:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class branchname extends Model
{
//
}

model coursename.php is:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class coursename extends Model
{
//
}

Upvotes: 2

Views: 183

Answers (5)

Rosh
Rosh

Reputation: 491

 $branchname = branchname::join('coursenames','coursenames.id','=','branchnames.course_id')->select('coursenames.id as course_id','branchnames.branchname')->get();

Now using Eloquent:

In the Branchname model

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class branchname extends Model
{

  // creating a one to many relationship with model coursename

  public function coursename(){

    return $this->hasMany('App\coursename');
  }

}

In the coursename model:

    <?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class coursename extends Model
{
   public function branchname(){

    return $this->belongsTo('App\branchname');

   }
}

In the controller:

public function index()
{
    $branchname = branchname::all();
    return view('admin.branchname')->with('branchname',$branchname);

}

In the view branchname.blade:

<tbody>
    @foreach($branchname as $branchnames)
     <tr>
      <td>{{ $branchnames->branchname }}</td>
      <td>{{ $branchnames->coursename->course_name }}</td>
     </tr>
    @endforeach     
</tbody>

Upvotes: 1

you can try this

--> branchname.php (model)

namespace App\Model;
use Illuminate\Database\Eloquent\Model;
class branchname extends Model
{
  public function course()
  {
      return $this->belongsTo(coursename::class,'course_id','id');
  }
}

--> BranchNameController.php

namespace App\Http\Controllers;
use App\Model\branchname;
use Illuminate\Http\Request;
use App\Model\coursename;

public function index()
{
   $branchname = branchname::orderBy('updated_at','DESC')->paginate(15);
    return view('branchname.branchname',['page'=>'Branchname','branchname'=>$branchname]);
}

--> branchname.blade.php

<tbody>
@foreach($branchname as $items)
<tr>
  <td>{{ $items->branchname }}</td>
  <td>{{ $items->course->id }}</td>
</tr>
@endforeach     
</tbody>

Upvotes: 0

Usman Jdn
Usman Jdn

Reputation: 827

try this
branchName model

namespace App;

use Illuminate\Database\Eloquent\Model;

class branchname extends Model
{
  public function course(){
    return $this->belongsTo(coursename::class, 'coursename_id');
  }
}

// courseName model

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class coursename extends Model
{
  public function branch(){
    return $this->hasOne(branchname::class, 'coursename_id');
  }
}

Upvotes: 3

Kamal Paliwal
Kamal Paliwal

Reputation: 1301

You can use Laravel relations to achieve this. Your branchnames course_id column belongs to course table.

Add the following relation in you branchname model:

public function course() {
    return $this->belongsTo(\App\coursename::class, 'course_id')
}

Then in you controller index function use:

public function index()
{
    $branchname = branchname::with('course')->get();
    $coursename = coursename::all();
    return view('admin.branchname',compact('branchname','coursename'));
}

Then in view you can show name as:

<td>{{ isset($branchnames->course) ? $branchnames->course->coursename : "" }}</td>

Upvotes: 4

Jignesh Joisar
Jignesh Joisar

Reputation: 15115

using join method in laravel see

 public function index()
    {
        $branchname = branchname::join('coursenames','coursenames.id','=','branchnames.course_id')->select('coursenames.id as course_id','branchnames.branchname')->get();
        return view('admin.branchname',compact('branchname'));
    }

Upvotes: 2

Related Questions