php - Laravel yajrabox 关系排序
问题描述
我有一个使用 yajrabox 的 laravel 和数据表项目,它卡在关系排序中
<?php
namespace App\DataTables;
use DB;
use App\Models\Kabupaten;
use Yajra\DataTables\Html\Button;
use Yajra\DataTables\Html\Column;
use Yajra\DataTables\Html\Editor\Editor;
use Yajra\DataTables\Html\Editor\Fields;
use Yajra\DataTables\Services\DataTable;
class KabupatenDataTable extends DataTable
{
/**
* Build DataTable class.
*
* @param mixed $query Results from query() method.
* @return \Yajra\DataTables\DataTableAbstract
*/
public function dataTable($query)
{
return datatables()
->eloquent($query)
->addIndexColumn()
->addColumn('kordinat', function(Kabupaten $kabupaten) {
return $kabupaten->koordinat_bujur.",".$kabupaten->koordinat_lintang;
})
// ->addColumn( 'action', function($data){ // $data is data od current row in table
// return view( 'kabupaten.action', [ 'data' => $data ] );
// } );
->addColumn('action', 'kabupaten.action');
}
/**
* Get query source of dataTable.
*
* @param \App\Models\Kabupaten $model
* @return \Illuminate\Database\Eloquent\Builder
*/
public function query(Kabupaten $model)
{
// return $model->newQuery()->with('provinsi');
return Kabupaten::with('provinsi')->select('kabupaten.*','provinsi.provinsi');
}
/**
* Optional method if you want to use html builder.
*
* @return \Yajra\DataTables\Html\Builder
*/
public function html()
{
return $this->builder()
->setTableId('kabupaten-table')
->columns($this->getColumns())
->minifiedAjax()
->dom('Bfrtip')
->orderBy(1)
->parameters([
'buttons' => ['excel'],
])
->buttons(
Button::make('create'),
Button::make('export'),
Button::make('print'),
Button::make('reset'),
Button::make('reload')
);
}
/**
* Get columns.
*
* @return array
*/
protected function getColumns()
{
return [
Column::make('DT_RowIndex')->title('No')->orderable(false)->searchable(false),
Column::make('provinsi.provinsi'),
Column::make('status'),
Column::make('kabupaten')->title('Nama kabupaten'),
Column::make('ketinggian'),
Column::make('kordinat')
->exportable(false)
->printable(false),
// Column::make('keterangan'),
Column::computed('action')
->exportable(false)
->printable(false),
];
}
/**
* Get filename for export.
*
* @return string
*/
protected function filename()
{
return 'Kabupaten_' . date('YmdHis');
}
}
这是我的 kabupaten 数据表类
<form id="delete_form" method="POST">
@csrf
@method('DELETE')</form>
<a type="button" href="{{route('adm.kabupaten.show', ['id' => $id])}}" class="btn btn-just-icon btn-round btn-sm btn-info" data-toggle="tooltip" data-placement="bottom" title="detail">
<i class="fa fa-eye"></i>
</a>
<a href="{{route('adm.kabupaten.edit', ['id' => $id])}}" class="btn btn-just-icon btn-round btn-sm btn-primary" data-toggle="tooltip" data-placement="bottom" title="ubah">
<i class="fa fa-edit"></i>
</a>
<a href="#" data-url="{{ route('adm.kabupaten.destroy', $id) }}" class="btn btn-just-icon btn-round btn-sm btn-danger" onclick="return deleteConfirm(this);">
<i class="fa fa-trash"></i>
</a>
<script>
$(function() {
$('[data-toggle="tooltip"]').tooltip();
})
</script>
这是我的行动专栏。
省模型
public function kabupaten()
{
return $this->hasMany(Kabupaten::class);
}
和 kabupaten 模型
public function provinsi()
{
return $this->belongsTo(Provinsi::class);
}
我的问题是为什么 $id in kabupaten.action返回 provinsi.id 而不是 kabupaten.id
我试过了
return Kabupaten::with('provinsi')->select('kabupaten.*','provinsi.provinsi');
$id 返回 kabupaten.id 但是当我尝试对列进行排序时,它说找不到列 provinsi.provinsi 因为 yajra 没有加入我的查询。
如果我的代码有任何问题。
谢谢
解决方案
尝试在 query() 中将 eloquent 'with' 更改为 'join'
public function query(Kabupaten $model)
{
return Kabupaten::query()
->leftJoin('provinsi', 'provinsi.id', '=', 'kabupaten.provinsi_id')
->addSelect([
'kabupaten.*',
'provinsi.provinsi as provinsi_provinsi'
]);
}
并添加列
Column::make('provinsi_provinsi')->name('provinsi_provinsi')->title('provinsi_provinsi'),
推荐阅读
- python - Django 没有将表单保存到数据库
- android - 如何将图标添加到 Whatsapp 或 Snapchat (Android) 等内部存储文件夹
- reactjs - antd表中是否可以显示html格式的文本?
- android - 保留的片段和活动在后台被杀死
- c# - 在 C# 中将派生的 xml 序列化为基类
- watson-knowledge-catalog - WKC中文件连接源的“XXXX_Datacatalog”和“XXXX_Datacatlog_viewer”
- python - 根据其他数据框的条件创建数据框
- javascript - 文件类型更改(HTML 输入[type=file])
- laravel - 将刀片视图导出到 excel 或 word
- haskell - ghc.exe:无法加载包