Reputation: 614
I am using datatables from https://datatables.net/examples/server_side/simple.html
and I am able to display all the information to the tables.
Now I have a column which stores foreign key as shown below.
The other table which is being pointed by source_of_member is
so here i have these kind of relationship and in frontend datatables my data are visualized as
Howeber here instead of foreign keys in Member Source column I want those Name to appear from another table which matches the id my member model is as:
class Member extends Model
{
protected $fillable = ['name','mobile_number','organization_name','source_of_member','relationship_manager','referred_by'];
public function memberSource()
{
return $this->hasOne('App\MemberSource', 'id');
}
}
and my memberSource model is as:
class MemberSource extends Model
{
protected $fillable = ['name'];
public function member()
{
return $this->hasOne('App\Member', 'id');
}
}
what i tried is:
public function getdata()
{
$members = Member::all();
return Datatables::of($members)
->addColumn('action', function($member){
return '<a data-id="'.$member->id.'" href="#" data-toggle="modal" id="openShow" class="btn btn-info btn-xs"><i class="fas fa-eye"></i></a> ' .
'<a href="member/edit/'.$member->id.'" class="btn btn-primary btn-xs"><i class="fas fa-edit"></i></a> ' .
'<a href="member/delete/'.$member->id.'" class="btn btn-danger btn-xs"><i class="fas fa-trash-alt"></i></a>';
})
->make(true);
}
i dont know how to do this any help would be greatly appreciated.
Upvotes: 0
Views: 79
Reputation: 80
In your Member model:
public function memberSource()
{
return $this->hasOne('App\MemberSource', 'source_of_member');
}
In Controller:
$members = Member::with('memberSource')->get();
return Datatables::of($members)
->addColumn('source_of_member', function ($member) {
$member_name = '';
if(!empty($member->memberSource->name)){
$member_name = $member->memberSource->name;
}
return $member_name;
})
->addColumn('action', function($member){
return '<a data-id="'.$member->id.'" href="#" data-toggle="modal" id="openShow" class="btn btn-info btn-xs"><i class="fas fa-eye"></i></a> ' .
'<a href="member/edit/'.$member->id.'" class="btn btn-primary btn-xs"><i class="fas fa-edit"></i></a> ' .
'<a href="member/delete/'.$member->id.'" class="btn btn-danger btn-xs"><i class="fas fa-trash-alt"></i></a>';
})
->make(true);
Upvotes: 1
Reputation: 10176
With the relationships working properly, you can simply edit the column in the datatable:
$members = Member::with('memberSource');
return Datatables::of($members)
->editColumn('source_of_member', function ($member) {
return $member->memberSource->name;
})
->addColumn('action', function($member){
return '<a data-id="'.$member->id.'" href="#" data-toggle="modal" id="openShow" class="btn btn-info btn-xs"><i class="fas fa-eye"></i></a> ' .
'<a href="member/edit/'.$member->id.'" class="btn btn-primary btn-xs"><i class="fas fa-edit"></i></a> ' .
'<a href="member/delete/'.$member->id.'" class="btn btn-danger btn-xs"><i class="fas fa-trash-alt"></i></a>';
})
->make(true);
However, your relationship configuration seems wrong, because your foreign key is called source_of_member
and therefore laravel can't automatically detect it.
In your Member
model:
public function memberSource()
{
return $this->hasOne('App\MemberSource', 'source_of_member');
}
In your MemberSource
model:
public function member()
{
return $this->belongsTo('App\Member', 'source_of_member');
}
Upvotes: 1