Как использовать Eloquent с Yajra Datatables? - PullRequest
0 голосов
/ 17 февраля 2020

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

Моя функция контроллера:

   public function getActions(){
    $data = Action::all();
    return DataTables::of($data)
   ->addColumn('name',function(Action $action){
       return empty ($action->patient->first_name) ? $action->patient_id : $action->patient->first_name;
        //return DB::raw("SELECT * FROM 'patients' WHERE 'patients_id' = ?", $action->patient_id);
    })
    ->make(true);
} 

Моя js функция в представлении:

    <script type="text/javascript">
        $(document).ready(function (){
          $('#actionTable').DataTable({
              processing: true,
              serverSide: true,
              ajax:'{!! route('get.actions')!!}',
              columns:[
                 {data:'action_id', name:'action_id'},
                 {data:'name', name:'name'},
                 {data:'action_status_id', name:'action_status_id'},
                 {data:'is_complete', name:'is_complete'},
              ]
          });
        })
     </script>

Мой класс действий:

    class Action extends Model
    {
        protected $table ="actions";

        protected $fillable=[
           'user_id', 'patient_id', 'option_id', 'action_status_id', 'is_complete', 'due_date',
        ];

        protected $primary_key = "action_id";

        public $incrementing = false;

        public function patients(){
              return $this->belongsTo('App\Patient','patient_id','action_id');
        }
   }

Мой класс пациентов:

     class Patient extends Model
     {
        protected $table ="patients";

        protected $fillable=[
            'first_name', 'last_name', 'email', 'phone', 'dob', 'gender_id', 'is_active',
        ];

        protected $primary_key = 'patient_id';

        public $incrementing = false;

        public function actions(){
            return $this->hasMany('App\Action','action_id','patient_id');
        }
    }

1 Ответ

1 голос
/ 17 февраля 2020

Проблема в том, что вы назвали свою функцию отношения внутри вашей модели действий как "пациенты". И вы звоните

$action->patient->first_name.

Я предлагаю переименовать функцию отношения внутри вашей модели действий в

public function patient()

Это имеет больше смысла.

Пожалуйста, обратитесь к документации для уточнения Отношения один к одному

...