Reputation: 65
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
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
Reputation: 49
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
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
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
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