我相信我已经接近了,但仍在努力如何将给定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上创建所需的查询以返回到数据表。
答案 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);
}