- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含 first_name 和 last_name 字段的用户表,以及一个访问器 getFullNameAttribute,我使用 Yajrabox 数据表将其显示为交互式表。使用“全名”访问器,我可以很好地显示表格,但是当我尝试按“全名”字段排序时,实际上什么也没有发生。 ajax 调用被执行,但排序保持不变并且没有报告错误。我可以按任何其他字段进行排序,并且效果很好。这个包添加的模型属性有排序限制吗?似乎无法在文档中找到任何内容。
非常感谢!
最佳答案
为了详细说明我的评论,这里有一个答案。
您不能使用虚拟属性(例如您想要的 getFullNameAttribute()
)进行排序和过滤。即使有效,它也会在内存中执行,因为 Laravel 无法自动将这些访问器转换为 SQL。
相反,您可以在 SQL 中重新创建所需的访问器。仅此还不够,因为 yajra 的 DataTables 包不能按表达式排序,只能按列名排序。因此,您必须将整个查询包装在另一个查询中。示例:
class UserDataTable extends DataTable
{
public function query(): \Illuminate\Database\Query\Builder
{
return DB::query()->fromSub(
User::query()
->select([
'*',
DB::raw("CONCAT(first_name, ' ', last_name) as full_name")
]),
'wrapped'
);
}
protected function getColumns(): array
{
return [
['data' => 'first_name', 'title' => 'First Name'],
['data' => 'last_name', 'title' => 'Last Name'],
['data' => 'full_name', 'title' => 'Full Name'],
];
}
}
请注意,用 DB::query()->fromSub(...)
包裹表格会阻止您在过滤器部分使用类型提示:
public function dataTable($query): DataTableAbstract
{
/** @var QueryDataTable $dataTable */
$dataTable = datatables($query);
return $dataTable
->editColumn('first_name', function ($user) {
/** @var User|\stdClass $user */
return ucfirst($user->first_name);
});
}
使用 /** @var User|\stdClass $user */
是一种在函数参数中没有类型提示的情况下仍然获得 IDE 支持的方法。
关于laravel - 按 Eloquent 访问器字段在 Yajrabox 数据表中排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56572883/
我使用 yajrabox 数据表,我想向所有表添加公共(public)选项该插件需要选择一个选择器或表。如何在不选择的情况下微调我的偏好 我的基本代码是 $(function() {
我有一个包含 first_name 和 last_name 字段的用户表,以及一个访问器 getFullNameAttribute,我使用 Yajrabox 数据表将其显示为交互式表。使用“全名”访问
我正在使用 Yajrabox Laravel 数据表来显示数据。很简单,试试教程中给出的内容。但是,在表格的页脚中输入的文本框没有显示出来。 https://datatables.yajrabox.c
我是 Laravel 新手,我正在尝试使用 YajraBox 创建一个数据表扩展名。 我被困在 ajax Controller 上: public function indexData(LotFilt
我正在使用这个包https://datatables.yajrabox.com/starter在我的 laravel 应用程序中实现 ajax 数据表。 在我的 Controller 类中,我有以下方
我是一名优秀的程序员,十分优秀!