Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 服务器端Yajra数据表列:[]操作_Javascript_Laravel_Datatables_Yajra Datatable - Fatal编程技术网

Javascript 服务器端Yajra数据表列:[]操作

Javascript 服务器端Yajra数据表列:[]操作,javascript,laravel,datatables,yajra-datatable,Javascript,Laravel,Datatables,Yajra Datatable,我想操纵yajra数据表 columns:[ { data: 'fname', name: 'members.fname' }, { data: 'fname', name: 'employees.emp_fname' } ] 使用下面显示的渲染功能,但它没有运行。return语句中有一个错误。该表不呈现任何数据。我就是找不到合适的解决办法。我已经使用了alias和addColumn,效果很好,但问题是它不允许在名称中搜索。这就是我提出这种代码行的原因,因为它可能允许搜索,如果

我想操纵yajra数据表

columns:[
    { data: 'fname', name: 'members.fname' },
    { data: 'fname', name: 'employees.emp_fname' }
]
使用下面显示的渲染功能,但它没有运行。return语句中有一个错误。该表不呈现任何数据。我就是找不到合适的解决办法。我已经使用了
alias
addColumn
,效果很好,但问题是它不允许在名称中搜索。这就是我提出这种代码行的原因,因为它可能允许搜索,如果它工作的话。请帮忙。谢谢

p3bills_table = $('#table-p3bills').DataTable({
    processing: true,
    serverSide: true,
    order: [
        [
            1, "asc"
        ]
    ],
    ajax: {
        url: "{{ route('get.p3bills') }}",
    },
    columns: [
        { data:'id', name:'p3bills.id' },
        { data:'id', name:'p3bills.id', orderable: true },
        { data:'p3loan_id', name:'p3loan_id' },
        { data:'schedule', name:'p3bills.schedule' },
        {
            render: function (data, type, full, meta) {
                if (full.member_id == 0) {
                    return data:'fname', name: 'employees.emp_fname';
                } else {
                    return data:'fname', name: 'members.fname';
                }
            }
        },
        { data:'lname', name:'members.lname' },
        { data:'mname', name:'members.mname' }
    ]
});
控制器

 public function getP3bills(){

    $p3bills = P3bill::leftJoin('p3payments', 'p3payments.p3bill_id', '=', 'p3bills.id')
                     ->leftJoin('members', 'members.id', '=', 'p3bills.member_id')
                     ->leftJoin('employees', 'employees.id', '=', 'p3bills.employee_id')
                     ->select(['members.id','members.lname','members.fname','members.mname','members.extension','employees.id','employees.emp_lname','employees.emp_fname','employees.emp_mname','employees.emp_extension','p3bills.*','p3payments.payment_amount','p3payments.or_number'])
                     ->selectRaw(  '('.
            'CASE'.
            ' WHEN members.id=0 THEN employees.emp_fname'.
            ' ELSE members.fname'.
            ' END'.
        ') AS person_name' );
    }

您需要在后端处理这种情况

我假设您使用的是Yajra数据表

您可以使用语句根据您的条件确定将返回什么

例如:

/**
 * Get query source of dataTable.
 *
 * @param \App\Models\User $model
 * @return \Illuminate\Database\Eloquent\Builder
 */
public function query(User $model)
{
    $query = $model->newQuery()
        ->select()
        ->selectRaw(
            '('.
                'CASE'.
                ' WHEN members.id=0 THEN employees.emp_fname'.
                ' ELSE members.fname'.
                ' END'.
            ') AS person_name'
        );

    return $query;
}
若要在此新列上启用搜索,您需要调用方法

根据您的Laravel DataTables版本和选择的实现方法,您的代码可能会有所不同。例如,下面的代码用于使用服务实现的Laravel DataTables v9

/**
 * Build DataTable class.
 *
 * @param  mixed  $query Results from query() method.
 * @return \Yajra\DataTables\DataTableAbstract
 */
public function dataTable($query)
{
    return datatables($query)
        ->filterColumn('person_name', function($query, $keyword) {
            $query->whereRaw(
                '('.
                    'CASE'.
                    ' WHEN members.id=0 THEN employees.emp_fname'.
                    ' ELSE members.fname'.
                    ' END'.
                ') ILIKE ?', 
                [ '%' . sql_escape_like($keyword) . '%' ]
            );
        });
}
此外,我还使用以下helper方法对
LIKE
/
ILIKE
子句中的特殊字符进行转义

if (! function_exists('sql_escape_like')) {
    /**
     * Escape special characters for SQL query with LIKE condition.
     *
     * @param  string $value
     * @return string
     */
    function sql_escape_like($value)
    {
        return str_replace(['\\', '%', '_'], ['\\\\', '\\%', '\\_'], $value);
    }
}
然后使用
{data:'person_name'}
作为JavaScript DataTables初始化代码中的列定义。

根据的建议,检查控制器中的状态并呈现 使用伪列的元素。在控制器中,您可以这样做

$bills = Bill::all(); // Your Model Query goes here

return datatables($bills)
        ->addColumn('fname', function ($bill) {
            if ($bill->member_id == 0) {
                return $bill->employee->fname; // Employee First Name
            }

            return $bill->member->fname; // Member First Name
        })
        ->toJson();
在JavaScript中,您可以将其用作

{ data: 'fname' }

我还没试过这个。我回家后再试试这个。这看起来不错。但几天前我尝试过使用alias,问题是无法在datatable中搜索名称,因为alias中使用的名称在数据库中不存在,在本例中为人名。我希望这个代码运行良好。稍后我会给你更新。在数据表中搜索姓名时,这是否有效?我编辑了我的帖子并显示了我的控制器功能,我应用了你的代码,但它不会在表中显示employees.emp_fname,而只显示members.fname。搜索不起作用。@Eli,您是否用
{data:'person_name'}
替换了列定义?是的,先生。{data:'person\u name',name:'person\u name'},搜索不起作用,我不知道为什么它不会显示员工。emp\u fname此代码允许搜索名字吗?因为我在yajra中读到无法搜索addColumn函数中定义的名称。addColumn是一个伪列,不允许在它们之间进行搜索。更多信息请点击这里@linktoahef,您有一个很好的替代解决方案,但搜索不起作用。如果使用
filterColumn('fname',函数($query,$keyword){}
,则可以自定义搜索条件。