如何使用yajra数据表过滤一个客户

时间:2016-07-28 18:18:12

标签: laravel-5 datatables

我有一个客户表,每条记录链接到一位客户联系人:

http://localhost/untdchem/public/home/customers/contacts/1809

当我点击上面的链接时,我想只在数据表中显示客户1809的所有联系人。我试图以某种方式传递客户ID,因此我只能过滤该客户。我可以用所有联系人填写表格,但我想为该客户加载。

路线:

 //Customer Contacts
        Route::get('home/customers/contacts', ['as' => 'customers.contacts', 'uses' => 'CustomerContactsController@index']);
        Route::get('home/customers/contacts/data', ['as' => 'customers.contacts.data', 'uses' => 'CustomerContactsController@anyData']);

在我的控制器中:

 public function index()
    {
        // GET request to index
        return view('pages.customer_contacts.index');
    }

 public function anyData()
    {


    $contacts = customer_contact::select(['CustContactFName','CustContactLName','CustContactCountryCode','CustContactExtension','CustContactPhone','CustContactEmail','CustContactType']);
    return Datatables::of($contacts)->make(true);     
    }

在我看来:

<script>
$(function() {
    $('#customer-contacts-table').DataTable({
        processing: true,
        serverSide: true,

        ajax: '{!! route('customers.contacts.data') !!}',

        columns: [
            { data: 'CustContactFName', name: 'CustContactFName'},
            { data: 'CustContactLName', name: 'CustContactLName'},
            { data: 'CustContactCountryCode', name: 'CustContactCountryCode'},
            { data: 'CustContactExtension', name: 'CustContactExtension'},
            { data: 'CustContactPhone', name: 'CustContactPhone'},
            { data: 'CustContactEmail', name: 'CustContactEmail'},
            { data: 'CustContactType', name: 'CustContactType'}
            //{ data: 'action', name: 'action', orderable: false, searchable: false}
        ],
        order: [[0, "desc" ]]
    });


});
</script>

2 个答案:

答案 0 :(得分:0)

路线

Route::get('home/customers/contacts/{id}', ['as' => 'customers.contacts', 'uses' => 'CustomerContactsController@index']);
Route::get('home/customers/contacts/data/{id}', ['as' => 'customers.contacts.data', 'uses' => 'CustomerContactsController@anyData']);

控制器

我假设有CustId字段,用于标识联系人记录分配给哪个客户。如果您的结构不同,请相应调整。

public function index($id) {
    // GET request to index
    return view('pages.customer_contacts.index', compact('id'));
}

public function anyData($id){    
   $contacts = customer_contact::select([
         'CustContactFName',
         'CustContactLName',
         'CustContactCountryCode',
         'CustContactExtension',
         'CustContactPhone',
         'CustContactEmail',
         'CustContactType'
      ])
      ->where('CustId', '=', $id);

   return Datatables::of($contacts)->make(true);     
}

的JavaScript

使用ajax选项更新该行:

ajax: '{!! route('customers.contacts.data', ['id' => $id]) !!}',

答案 1 :(得分:0)

以下正确的解决方案:

public function index($CustID = null, Request $request)
{
    if ($request->ajax()) {
        $contacts = customer_contact::select(['CustContactFName','CustContactLName','CustContactCountryCode','CustContactExtension','CustContactPhone','CustContactEmail','CustContactType']);
        if ($CustID) {
            $contacts->where('CustID', $CustID);
        }

        //dd($contacts);

        return Datatables::of($contacts)
         ->addColumn('action', function ($contacts) {

                $links="";
                $links.='<a href="'.url('home/customers/contacts/edit', [$contacts->CustID]).'">Edit</a>&nbsp;|&nbsp;';
                $links.='<a class="delete" href="'.url('home/customers/contacts/delete', [$contacts->CustID]).'">Delete</a>&nbsp;|&nbsp;';
                return $links;

            })->make(true);     
    }

    return view('pages.customer_contacts.index', compact('CustID'));
}


<script>
$(function() {
    $('#customer-contacts-table').DataTable({
        processing: true,
        serverSide: true,

        ajax: '{!! route('customers.contacts', $CustID) !!}',

        columns: [
            { data: 'CustContactFName', name: 'CustContactFName'},
            { data: 'CustContactLName', name: 'CustContactLName'},
            { data: 'CustContactCountryCode', name: 'CustContactCountryCode'},
            { data: 'CustContactExtension', name: 'CustContactExtension'},
            { data: 'CustContactPhone', name: 'CustContactPhone'},
            { data: 'CustContactEmail', name: 'CustContactEmail'},
            { data: 'CustContactType', name: 'CustContactType'},
            { data: 'action', name: 'action', orderable: false, searchable: false}
        ],
        order: [[0, "desc" ]]
    });


});
</script>