我使用yajra / laravel-datatables-editor包中的编辑器设置数据表。我可以得到它在数据表出现和工作的地方,但当我尝试编辑一个字段时它不会更新,我在ajax调用时得到一个500错误此消息"类型错误:参数1传递给App \ DataTables \ DioceseDataTablesEditor :: editRules()必须是Illuminate \ Database \ Eloquent \ Model的一个实例,null给出"
我使用了包含给用户的教程,只是使用了不同行的不同表格。寻找一些帮助,因为我难以接受我所缺少的东西。
这是我的DioceseDataTablesEditor.php文件,它是发生错误的地方。
po age
我注意到的是在ajax调用中它永远不会发送行的唯一ID,这是我在Diocese模型中设置的一个名为link的列。这就是我认为可能存在的问题。它只会将以下内容发送到帖子中的字段。
动作:编辑 数据[链接] [denominat]:其他 //它是实际的单词链接,而不是带整数的链接值。
这是我的javascript for it。
namespace App\DataTables;
use App\Diocese;
use Illuminate\Validation\Rule;
use Yajra\DataTables\DataTablesEditor;
use Illuminate\Database\Eloquent\Model;
class DioceseDataTablesEditor extends DataTablesEditor
{
protected $model = Diocese::class;
/**
* Get create action validation rules.
*
* @return array
*/
public function createRules()
{
return [
//'diocese' => 'required',
];
}
/**
* Get edit action validation rules.
*
* @param Model $model
* @return array
*/
public function editRules(Model $model) //This is where the error occurs
{
return [
// 'diocese' => 'sometimes|required',
];
}
/**
* Get remove action validation rules.
*
* @param Model $model
* @return array
*/
public function removeRules(Model $model)
{
return [];
}
/**
* Pre-update action event hook.
*
* @param Model $model
* @return array
*/
public function updating(Model $model, array $data)
{
return $data;
}
}
任何帮助都将不胜感激。
编辑。这是控制器
$(function() {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': '{{csrf_token()}}'
}
});
var editor = new $.fn.dataTable.Editor({
ajax: "/admin/diocese",
table: "#diocese",
display: "bootstrap",
fields: [
{ label: 'link', name: 'link' },
{ label: 'denominat', name: 'denominat', type: 'select', options: [
"Catholic", "Episcopal", "Methodist", "PNCC", "American Baptist", "ELCA", "AMEZC", "Presbyterian", "Individual", "Other", "AME Church", "ACNA"
] },
{ label: 'abbrev', name: 'abbrev' },
{ label: 'diocese', name: 'diocese' },
{ label: 'addrone', name: 'addrone' },
{ label: 'addrtwo', name: 'addrtwo' },
{ label: 'city', name: 'city' },
{ label: 'state', name: 'state' },
{ label: 'zipcode', name: 'zipcode' },
{ label: 'telephone', name: 'telephone' },
]
});
$('#diocese').on('click', 'tbody td:not(:first-child)', function (e) {
editor.inline(this);
});
{{$dataTable->generateScripts()}}
})
答案 0 :(得分:0)
我能够解决这个问题,并留下答案供将来参考。认为数据作为数据发送[link] [denominat] ="其他"是错的我设置了一个简单的测试形式,将该数据作为ajax帖子发送,但让我看看我认为它应该是什么样的数据[42456] [denominat] ="其他"当我这样做时,效果很好。
然后我更多地关注编辑器文档,我不得不让编辑知道我的主键的名称是" link"所以代码改为以下内容。
var editor = new $.fn.dataTable.Editor({
ajax: "/admin/diocese",
table: "#diocese",
idSrc: "link", // ##added this line
display: "bootstrap",
fields: [
{ label: 'link', name: 'link' },
{ label: 'denominat', name: 'denominat', type: 'select', options: [
"Catholic", "Episcopal", "Methodist", "PNCC", "American Baptist", "ELCA", "AMEZC", "Presbyterian", "Individual", "Other", "AME Church", "ACNA"
] },
{ label: 'abbrev', name: 'abbrev' },
{ label: 'diocese', name: 'diocese' },
{ label: 'addrone', name: 'addrone' },
{ label: 'addrtwo', name: 'addrtwo' },
{ label: 'city', name: 'city' },
{ label: 'state', name: 'state' },
{ label: 'zipcode', name: 'zipcode' },
{ label: 'telephone', name: 'telephone' },
]
});