Làm cách nào để lấy dữ liệu mối quan hệ trong bảng dữ liệu yajra?

Tôi đang cố gắng sử dụng các mối quan hệ hùng hồn để hiển thị tên của bệnh nhân thay vì khóa ngoại id của bệnh nhân. Thay vào đó, nó chỉ hiển thị id bệnh nhân như thể nó không nhìn thấy mối quan hệ

Chức năng điều khiển của tôi là

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

Hàm js của tôi trong chế độ xem là

    

Lớp Hành động của tôi là

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

Lớp bệnh nhân của tôi là

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

Rất nhiều người đã đặt câu hỏi trên Github Repo của chúng tôi về cách họ có thể hiển thị dữ liệu mối quan hệ thành chỉ mục trong khi sử dụng Datatables. vì vậy tôi quyết định viết một bài hướng dẫn chi tiết về điều đó. Hãy xem làm thế nào nó có thể

Vấn đề

Hãy tưởng tượng kịch bản đơn giản sau đây. Chúng tôi có một bảng người dùng và chúng tôi có một bảng bài viết. Bảng Post khá đơn giản với các trường sau

  • nhận dạng
  • tác giả_id
  • tiêu đề
  • thân hình
  • created_at
  • cập nhật tại

Trong đó author_id là khóa ngoại đối với bảng người dùng. Chúng tôi muốn hiển thị tên tác giả vào bảng mục lục

Nhưng vì chúng tôi cần dữ liệu đó từ mối quan hệ, nên không có cách nào trực tiếp để hiển thị dữ liệu đó trong Datable

Giải pháp

Hãy thực hiện các bước sau [trước khi thực hiện các bước này, hãy tạo CRUD của bạn với các bảng dữ liệu cho mô hình Bài đăng]

Bước 1. Thêm mối quan hệ tác giả vào mô hình Bài viết

Vì chúng tôi muốn hiển thị tên tác giả của bài đăng, hãy thêm mối quan hệ tác giả vào Bài đăng. php

public function author[] {     
return $this->belongsTo[User::class, 'author_id']; 
}

Bước 2. Sửa PostDataTable

Vì chúng ta phải hiển thị dữ liệu quan hệ nên chúng ta cần tải nó bằng laravel. Sửa đổi phương thức truy vấn của PostDataTable. php. cái gì đó như,

public function query[Post $model] {     
return $model->newQuery[]->with[['author']]; 
}

Ngoài ra, chúng ta cần thêm một tên tác giả cột vào datatable. vì vậy hãy sửa đổi phương thức getColumns và thêm phương thức đó vào mảng. cái gì đó như,

protected function getColumns[] {     
return [        
       'title',         
       'author_name' => new \Yajra\DataTables\Html\Column[[
       'title' => 'Author Name', 
       'data' => 'author.name',
       'name' => 'author.name'
      ]]     
  ]; 
}

Điều này sẽ thêm một cột nữa với tiêu đề "Tên tác giả" trong bảng dữ liệu trước cột "Hành động". Ở đây, chúng tôi đang thêm cột có thể dữ liệu tùy chỉnh trong đó khóa sẽ là tên của cột mà dữ liệu có thể sử dụng nội bộ, tiêu đề sẽ được sử dụng cho tiêu đề tiêu đề Cột có thể dữ liệu và dữ liệu sẽ được sử dụng để truy xuất dữ liệu

Và đó là nó. Chạy mã của bạn và bạn sẽ có thể thấy Tên tác giả của bài đăng trong bảng dữ liệu của bạn

Laravel dataTables với hướng dẫn ví dụ về mối quan hệ. Tại đây, bạn sẽ tìm hiểu cách hiển thị và lọc cột trong bảng dữ liệu yajra có mối quan hệ

Giả sử bạn có hai bảng đầu tiên là bài đăng và bảng thứ hai là người dùng và bạn tạo mối quan hệ cho mỗi bảng. Sau đó, bạn muốn hiển thị và lọc tiêu đề bài viết và người viết những bài viết này [tên tác giả]. Lúc đó bạn cần sử dụng các cột laravel yajra dataTables có quan hệ

Đồng thời, hướng dẫn này trình bày cho bạn cách sử dụng bộ lọc trên các cột dataTables có mối quan hệ

Laravel DataTables với ví dụ về mối quan hệ

Thực hiện theo các bước sau và sử dụng mối quan hệ trên laravel yajra dataTables

  • Bước 1. Tải xuống ứng dụng Laravel mới
  • Bước 2. Thiết lập cấu hình cơ sở dữ liệu
  • Bước 3. Cài đặt Yajra DataTable
  • Bước 4. Tạo Migration và Modal
  • Bước 5. Tạo tuyến đường
  • Bước 6. Tạo bộ điều khiển bằng lệnh
  • Bước 7. Tạo tập tin lưỡi dao
  • Bước 8. Chạy máy chủ phát triển

Bước 1. Tải xuống ứng dụng Laravel mới

Trước hết, hãy mở thiết bị đầu cuối của bạn và sử dụng lệnh sau để tải xuống hoặc cài đặt thiết lập mới của laravel

composer create-project --prefer-dist laravel/laravel blog

Bước 2. Thiết lập cấu hình cơ sở dữ liệu

Sau đó, mở “. env” và cập nhật tên cơ sở dữ liệu, tên người dùng và mật khẩu trong tệp env

________số 8_______

Bước 3. Cài đặt Yajra DataTable

Cài đặt dữ liệu yajra thông qua gói trình soạn thảo, vì vậy hãy mở thiết bị đầu cuối của bạn và chạy lệnh sau

composer require yajra/laravel-datatables-oracle

Sau đó, bạn cần đặt nhà cung cấp và bí danh

cấu hình/ứng dụng. php

.....
'providers' => [
    ....
    Yajra\DataTables\DataTablesServiceProvider::class,
]
'aliases' => [
    ....
    'DataTables' => Yajra\DataTables\Facades\DataTables::class,
]
.....

Bước 4. Tạo Migration và Modal

Trong blog này, Chúng tôi sẽ tạo di chuyển bảng bài đăng và tạo Post Modal bằng lệnh dưới đây

php artisan nake:modal Post -m

database/migrations/2020_05_20_070104_create_posts_table. php

Chủ Đề