Отношения OneToOne в DataTables - PullRequest
0 голосов
/ 29 марта 2019

Я использую таблицы данных из https://datatables.net/examples/server_side/simple.html и могу отображать всю информацию в таблицах.

Теперь у меня есть столбец, в котором хранится внешний ключ, как показано ниже.enter image description here

Другая таблица, на которую указывает source_of_member: enter image description here

, поэтому здесь у меня есть такие отношения и вВнешние таблицы данных мои данные визуализируются как enter image description here

Здесь вместо внешних ключей в столбце Источник источника я хочу, чтобы эти Имя появлялись из другой таблицы, которая соответствует идентификатору, которому моя модель члена соответствует:

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');
    }
}

, и моя модель memberSource выглядит следующим образом:

class MemberSource extends Model
{
    protected $fillable = ['name'];

    public function member()
    {
        return $this->hasOne('App\Member', 'id');
    }
}

То, что я пробовал:

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);
    }

Я не знаю, как это сделать, любая помощь будетс благодарностью.

Ответы [ 2 ]

1 голос
/ 29 марта 2019

В вашей модели Member:

public function memberSource()
{
    return $this->hasOne('App\MemberSource', 'source_of_member');
}

В контроллере:

$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);
1 голос
/ 29 марта 2019

Если отношения работают правильно, вы можете просто отредактировать столбец в таблице данных:

$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);

Однако, ваша конфигурация отношений кажется неправильной, потому что ваш внешний ключ называется source_of_member и, следовательно, laravel не может автоматически обнаружить его.

В вашей Member модели:

public function memberSource()
{
    return $this->hasOne('App\MemberSource', 'source_of_member');
}

В вашей MemberSource модели:

public function member()
{
    return $this->belongsTo('App\Member', 'source_of_member');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...