将ID从Laravel显示传递到Datatables路线

时间:2019-07-03 01:39:22

标签: php ajax laravel datatables

我相信我已经接近了,但仍在努力如何将给定ID从我的show方法传递到关联的showdata中,以便数据表可以与该ID的关联数据一起显示。

当我对ID进行硬编码或完全删除where语句时,该代码将起作用。我的目标是让数据表仅针对给定的集合与项目相关联。

路线:

Route::resource('collections', 'CollectionsController');
Route::get('collectionsdata/{id}', 'CollectionsController@showdata');

Show.blade.php:

var id = {{ $collection->id }}
        $(function () {...

$('#item-table').DataTable({
                //processing: true,
                serverSide: true,
                ajax: "/collectionsdata/"+ id,
                columns: [
                    //{data: 'id', name: 'id'},
                    {data: 'id', name: 'id'},
                    {data: 'collection_id', name: 'collection_id'},
                    {data: 'type_id', name: 'type_id'},
                    {data: 'collection.title', name: 'collection.title'},
                    {data: 'type.name', name: 'type.name'},
                    {data: 'updated_at', name: 'updated_at'},
                ]
            });

集合控制器:

    public function show(Collection $collection)
    {
        $collection->load('items.type')->get();

        //dd($collection);
        return view ('collections.show', compact('collection'));
    }

    public function showdata()
    {
        $data = Item::with('collection', 'type')->where('collection_id', $id);

        return Datatables::of($data)->make(true);
    }

SHOW本身运行良好,var id在刀片服务器上运行良好-我想我只是在控制器中缺少一些东西来获取id,并最终在$ data上创建所需的查询以返回到数据表。

2 个答案:

答案 0 :(得分:1)

是的。您在show方法中缺少从路由中检索$ id的 Request $ request

use Illuminate\Http\Request;

public function showdata(Request $request)
{
    $collection_id = $request->id;

    $data = Item::with('collection', 'type')->where('collection_id', $id);

    return Datatables::of($data)->make(true);
}

您还可以直接从控制器中检索 id ,而不用使用 $ request

public function showdata($id)
{
    $data = Item::with('collection', 'type')->where('collection_id', $id);

    return Datatables::of($data)->make(true);
}

答案 1 :(得分:1)

您只需要在showdata中使用一个参数,该参数就是您要从URL传递的ID的参数

public function showdata($id)
{
    $data = Item::with('collection', 'type')->where('collection_id', $id);
    return Datatables::of($data)->make(true);
}