如何使用带有 Ajax 和 Laravel 的 id 从另一个表中获取值?

问题描述

我在 Laravel 上尝试 Yajra Datatable,我在教程中找到了这个,我从单个表中获取值。
我必须将第一个表中每列的值与第二个表中的值进行比较,例如第一个表的状态为 1,它将检查状态类型表,其状态的 id 为 1,在本例中为 1 未决,因此数据表将显示“待定”而不是数字 1
下面是控制器的代码:

public function index()
{
    $documents = Documents::all();
    $status = Status::all();

    return view('document/index',compact('documents','status'));
}

public function getDocs(Request $request)
{
    if ($request->ajax()) {
        $docs = Documents::latest()->get();
        return Datatables::of($docs)
            ->addIndexColumn()
            ->addColumn('action',function($row){
                $actionBtn = '<a href="javascript:void(0)" class="edit btn btn-success btn-sm">Edit</a> <a href="javascript:void(0)" class="delete btn btn-danger btn-sm">Delete</a>';
                return $actionBtn;
            })
            ->rawColumns(['action'])
            ->make(true);
    }
}

这里来自文档/索引视图:

$(function () {

    var table = $('.yajra-datatable').DataTable({
        processing: true,serverSide: true,ajax: "{{ route('documents.list') }}",columns: [
            {data: 'id',name: 'id'},{data: 'status',name: 'status'}
        ]
    });

});

解决方法

首先定义状态和文档模型之间的关系

状态模型:

public function docs(){
    return $this->hasMany(Documents::class);
}

文档模型:

public function state(){
    return $this->belongsTo(Status::class,'status'); 
    # 'status' is the name of foreign key on documents table
}

文档控制器:

public function getDocs(Request $request)
{
    if ($request->ajax()) {
        $docs = Documents::with('state')->select('documents.*')->latest();
        # Here 'documents' is the name of table for Documents Model
        # And 'state' is the name of relation on Document Model.
        return Datatables::of($docs)
            ->addIndexColumn()
            ->addColumn('status_str',function($row){
                  # 'name' is the field in table of Status Model
                  return $row->state->name;
             })
            ->addColumn('action',function($row){
                $actionBtn = '<a href="javascript:void(0)" class="edit btn btn-success btn-sm">Edit</a> <a href="javascript:void(0)" class="delete btn btn-danger btn-sm">Delete</a>';
                return $actionBtn;
            })
            ->rawColumns(['action'])
            ->make(true);
    }
}

索引视图:

$(function () {

    var table = $('.yajra-datatable').DataTable({
        processing: true,serverSide: true,ajax: "{{ route('documents.list') }}",columns: [
            {data: 'id',name: 'id'},{data: 'status_str',name: 'state.name'}
        ]
    });

});

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...