Laravel:数据表搜索选项不使用关系表字段
Posted
技术标签:
【中文标题】Laravel:数据表搜索选项不使用关系表字段【英文标题】:Laravel : Data-table search option not working using relationship table field 【发布时间】:2020-01-10 11:07:47 【问题描述】:我在搜索连接表字段中的记录时遇到问题。我需要搜索所有列,包括连接表列。
这是我的所有国家和国家的控制器功能:
public function allStates()
$states = State::select(['id', 'country_id', 'state_type', 'state_code', 'state_name', 'status'])->orderBy('country_id','Asc');
return Datatables::of($states)
->addColumn('checkes', function ($states)
$data = $states;
return view('partials.datatable.table_first_column_checkbox', compact('data'))->render();
)
->editColumn('country_id', function ($states)
return $states->country ? $states->country->country_name : "N/A";
)
->editColumn('status', function ($states)
$data = $states;
$statusChangeRoute = route('state.change.status');
return view('partials.datatable.status-switch', compact('data','statusChangeRoute'))->render();
)
->addColumn('action', function ($states)
$editRoute = route('states.edit', $states->id);
$viewRoute = route('states.show', $states->id);
$controlKeyword = 'state';
return view('partials.datatable.table_edit_delete_action', compact('editRoute','viewRoute','controlKeyword'))->render();
)
->addColumn('DT_RowId', function ($states)
return "tr_" . $states->id;
)
->rawColumns(['checkes', 'status', 'action'])
->make(true);
在这个函数中,我刚刚编辑了country_id
列并返回$states->country->country_name
这是我的 js 函数:
<script type="text/javascript">
$(document).ready(function ()
table = $('#tblState').DataTable(
processing: true,
serverSide: true,
pageLength: 10,
ajax:
url: " route('admin.states.list') ",
type: "POST",
data: _token: "csrf_token()"
,
columns: [
data: 'checkes', name: 'checkes', orderable: false, searchable: false,
data: 'country_id', name: 'country_id',
data: 'state_type', name: 'state_type',
data: 'state_code', name: 'state_code',
data: 'state_name', name: 'state_name',
data: 'status', name: 'status',
data: 'action', name: 'action', orderable: false, searchable: false
],
"bStateSave": true,
initComplete: function (settings, json)
// called on first time initialization
,
drawCallback: function (settings)
// called on every server request
// below function is compulsory put here with table id param
initDTCheckBox('tblState');
);
);
</script>
这是我的视图屏幕
【问题讨论】:
【参考方案1】:可以直接在查询中使用:
$states = State::select(['id', 'country_id', 'state_type',
'state_code', 'state_name', 'status'])
->orderBy('country_id', 'Asc')
->with('country');
然后直接在你的 JS 中使用:
data: 'country.country_name', name: 'country.country_name',
addColumn
只影响列的视图,而不影响查询。所以当你想订购,或者在你的数据表中搜索时,插件找不到值,你必须在查询中有它
【讨论】:
以上是关于Laravel:数据表搜索选项不使用关系表字段的主要内容,如果未能解决你的问题,请参考以下文章