मेरे लार्वा प्रोजेक्ट के साथ डेटाटेबल्स सेट करने का प्रयास करते समय मुझे एक त्रुटि मिल रही है।

डेटाटेबल्स चेतावनी: टेबल आईडी=डेटाटेबल्स_टेबल_0 - अजाक्स त्रुटि। इस त्रुटि के बारे में अधिक जानकारी के लिए, कृपया देखें http://datatables.net/tn/7

यह मेरा नियंत्रक है।

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Transaction;
use DataTables;
use Illuminate\Support\Facades\DB;

class TestTableController extends Controller
{
public function index()
{
    return view('testtable');
}


public function getTestTable(Request $request)
{
    if ($request->ajax()) {
        $data = DB::table('transactions')->get();
        return Datatables::of($data)
            ->addIndexColumn()
            ->addColumn('action', function($row){
                $actionBtn = '<a href="javascript:void(0)" class="edit btn btn-success btn-sm">Edit</a> <a href="javascript:void(0)" class="delete btn btn-danger btn-sm">Delete</a>';
                return $actionBtn;
            })
            ->rawColumns(['action'])
            ->make(true);
    }
}
}

यह मेरा मार्ग है।

Route::get('testtable', [TestTableController::class, 'index']);
Route::get('testtable/list', [TestTableController::class, 'getTestTable'])->name('testtable.list');

देखें/ब्लेड.

<body>
<div class="container mt-5">
    <h2 class="mb-4">Laravel 7|8 Yajra Datatables Example</h2>
    <table class="table table-bordered yajra-datatable">
        <thead>
            <tr>
                <th>ID</th>
                <th>Amount</th>
                <th>Charge</th>
                <th>Action</th>
            </tr>
        </thead>
        <tbody>
        </tbody>
    </table>
</div>
</body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.0/jquery.validate.js"></script>
<script src="https://cdn.datatables.net/1.10.21/js/jquery.dataTables.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js">
</script>
<script src="https://cdn.datatables.net/1.10.21/js/dataTables.bootstrap4.min.js"> 
</script>

<script type="text/javascript">
$(function () {

var table = $('.yajra-datatable').DataTable({
    processing: true,
    serverSide: true,
    ajax: "{{ route('testtable.list') }}",
    columns: [
        {data: 'id', name: 'id'},
        {data: 'amount', name: 'amount'},
        {data: 'charge', name: 'charge'},
        {
            data: 'action',
            name: 'action',
            orderable: true,
            searchable: true
        },
    ]
});

});
</script>

यह लार्वा डीबगबार से त्रुटि है।

Text

लेकिन क्वेरी के परिणाम थे।

यदि मैं क्वेरी को प्रतिध्वनित करता हूं तो यह आउटपुट है।

$data = DB::table('transactions')->get();
echo $data;

Text

मुझे और कुछ याद आ रहा है? यदि मैं एक नए ताजा लार्वा स्थापना में परीक्षण करता हूं तो ठीक वही कोड काम कर रहा है। यह एक मौजूदा प्रोजेक्ट है जिसे मैं डेटाटेबल्स को लागू करने का प्रयास करता हूं। मुझे लगता है कि वर्तमान प्रोजेक्ट कॉन्फ़िगरेशन से कुछ ऐसा होना चाहिए जो समस्या उत्पन्न कर रहा हो।

1
Izzat Z. 18 अगस्त 2021, 03:05

3 जवाब

सबसे बढ़िया उत्तर

getTestTable फ़ंक्शन में आपका कोड ठीक दिखता है। आपको डीबगबार में मिला:

मॉडल [App\Frontend] परीक्षण तालिका के लिए कोई क्वेरी परिणाम नहीं

लेकिन getTestTable के कोड में testtable से संबंधित कुछ भी नहीं है, इसलिए मुझे लगता है कि route('testtable.list') उस फंक्शन तक नहीं पहुंचता। और इसका कारण यह हो सकता है कि आपने Route::get('testtable/{id}',... पहले Route::get('testtable/list',< /code> इसलिए जब आप testtable/list को कॉल करते हैं, तो यह list को id के रूप में लेगा और दूसरे फंक्शन में चला जाएगा।

अगर मेरा अनुमान सही है, तो आप testtable/list को testtable/{id} रूट से पहले लगाकर ठीक कर सकते हैं।

2
Cuong Le Ngoc 27 अगस्त 2021, 07:30

मैं अपने प्रोजेक्ट से नमूना कोड के साथ पूर्ण विवरण साझा करता हूं, यह नीचे दिया गया उदाहरण कोड मेरी परियोजना से एक प्रबंधन भूमिका डेटाटेबल है। कृपया चरण दर चरण देखें और इसे समझने का प्रयास करें।

सबसे पहले आपको नीचे दिए गए कंपोजर कमांड का उपयोग करके लारवेल यजरा डेटाटेबल इंस्टॉल करना होगा

संगीतकार को यजरा/लारवेल-डेटाटेबल्स-ओरेकल की आवश्यकता होती है

फिर मेरे नमूना कोड की तरह web.php में मार्गों को परिभाषित करने के बाद

Route::get('/', [\App\Http\Controllers\Admin\RoleController::class, 'index'])->name('admin.roles.index');  //index all the data view...

Route::post('/', [\App\Http\Controllers\Admin\RoleController::class, 'getIndexUsers'])->name('admin.roles.getIndexRoles');  //Get Users for Laravel Yajra Datatable Index Page record...

फिर इसके लिए दृश्य फ़ाइल बनाने के बाद, मैं अपने प्रोजेक्ट से नमूना साझा करता हूं

<div class="card-body">
   <table id="role_table" class="table table-bordered table-striped w-100">
       <thead>
          <tr>
             <th>No.</th>
             <th>Role Name</th>
             <th>Role Slug</th>
             <th>Action</th>
          </tr>
       </thead>
                  
       <tfoot>
            <tr>
               <th>No.</th>
               <th>Role Name</th>
               <th>Role Slug</th>
               <th>Action</th>
            </tr>
       </tfoot>
   </table>
</div>
<!-- /.card-body -->

और फूटर स्क्रिप्ट में नीचे की तरह डेटाटेबल को इनिशियलाइज़ करने के लिए फंक्शन को परिभाषित करें,

<script type="text/javascript">
    var dataTable = $('#role_table').DataTable({
        lengthMenu: [[10, 25, 50, -1], [10, 25, 50, "All"]],
        processing: true,
        serverSide: true,
        order: [],
        searchDelay: 500,
        "scrollX": "auto",
        "responsive": true,
        // "lengthChange": false,
        "autoWidth": true,
        ajax: {
            url: '{{ route("admin.roles.getIndexRoles")}}',
            type: 'post',
            headers: {
              'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
          },
          data: function (data) {
                // data.fromValues = $("#filterUserType").serialize();
            },
        },
        columns: [
            {data: 'SrNo', //try with data: 'SrNo' OR data: 'id',
                render: function (data, type, row, meta) {
                    // return meta.row + meta.settings._iDisplayStart + 1;
                    return meta.row + 1;
                }, searchable: false, sortable: false
            },
            {data: 'role_name', name: 'role_name'},
            {data: 'role_slug', name: 'role_slug'},
            {data: 'action', name: 'action', searchable: false, sortable: false},
        ],
    });
  </script>

इसके बाद अपने कंट्रोलर में यजरा डेटाटेबल क्लास लोड करें इसे इस्तेमाल करने के लिए

Yajra\DataTables\DataTables का उपयोग करें; // लारवेल डेटाटेबल जेएस के लिए ...

अब, इस तरह डिस्प्ले व्यू फाइल के लिए फंक्शन बनाएं,

public function index()
{
    return view('admin.roles.index');
}

अब मैंने डेटाटेबल इनिशियलाइज़ के लिए अजाक्स रिक्वेस्ट के लिए फंक्शन मेथड को क्रेट किया है

public function getIndexUsers(Request $request)
{
    $roles = Role::select('roles.*');
    if($request->order ==null){
        $roles->orderBy('id', 'desc');
    }
    $detail_data = $roles;
    return Datatables::of($detail_data)
        ->addColumn('action', function ($data) {
            return $this->DataTableAction($data);
        })
    ->rawColumns(['action'])
    ->make(true);
}

public function DataTableAction($data){
    $btn = '<div class="btn-group">';
        if($data->id == "1" || $data->id == "2"){
            $btn .= '<button type="button" class="btn btn-danger dropdown-toggle ml-2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" disabled>Action
                </button>';
        }else{
            $btn .= '<button type="button" class="btn btn-danger dropdown-toggle ml-2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Action
                    </button>';
        }
            $btn .= '<div class="dropdown-menu">';
            $btn .= '<a class="dropdown-item" href="'.route('admin.roles.edit',$data->id).'" style="color: black;" onmouseover=\'this.style.background="#dee2e6"\' onmouseout=\'this.style.background="none"\'><i class="far fa-edit text-primary"></i> Edit</a>';
            $btn .= '<div class="dropdown-divider"></div>';
            $btn .= '<a role_id="'.$data->id.'" class="dropdown-item deleteRole" href="#" style="color: black;" onmouseover=\'this.style.background="#dee2e6"\' onmouseout=\'this.style.background="none"\'><i class="far fa-trash-alt text-danger"></i> Delete</a>';
    $btn .= '</div>
        </div>';
    return $btn;
}

महत्वपूर्ण नोट:- वर्तमान में मैं Laravel 8 का उपयोग करता हूं, इसलिए config/app.php में यजरा सेवा प्रदाता वर्ग को परिभाषित करने की आवश्यकता नहीं है। लेकिन अगर आपको अपने अलग लारवेल संस्करण में कोई त्रुटि मिल रही है तो आपको यजरा सेवा प्रदाता वर्ग को config/app.php... में परिभाषित करने की आवश्यकता होगी, इसे परिभाषित करने के लिए नीचे दिए गए चरणों का पालन करें

**

ध्यान दें कि, नीचे दिया गया चरण अनिवार्य नहीं है, यह आपके Laravel पर निर्भर करता है संस्करण

**

config/app.php

.....
'providers' => [
    ....
    Yajra\DataTables\DataTablesServiceProvider::class,
]
'aliases' => [
    ....
    'DataTables' => Yajra\DataTables\Facades\DataTables::class,
]
.....

फिर कमांड के नीचे चलाएँ

php कारीगर अनुकूलन

फिर यदि आपको कोई समस्या आती है, तो कैशे का उपयोग करके साफ़ करने का प्रयास करें

php कारीगर कैश: साफ़ करें

महत्वपूर्ण नोट:- यदि आप config/app.php में सर्विस प्रोवाइडर क्लास को परिभाषित करते हैं और ऑप्टिमाइज़ कमांड चलाते हैं, तो हो सकता है Laravel इसे ऑटोलोड में लोड करेगा जो आपके द्वारा स्वचालित रूप से कॉल किए जाने पर कॉल हो जाएगा। कोड एक वर्ग या इंटरफ़ेस को संदर्भित करता है जो अभी तक लोड नहीं हुआ है, मुझे यकीन नहीं है

1
Harsh Patel 26 अगस्त 2021, 13:05

यदि ऐप कोड में सब कुछ ठीक है, तो आप यजरा के लिए कॉन्फिगरेशन खो सकते हैं .. इसलिए इसे कॉन्फ़िगर करने के लिए, आप ऐप रूट डायरेक्टरी में कॉन्फिग फोल्डर में जा सकते हैं और फिर वहां से ऐप.php फाइल खोल सकते हैं और इस लाइन को प्रोवाइडर में जोड़ सकते हैं। ..

Yajra\DataTables\DataTablesServiceProvider::class

परिणाम कुछ इस तरह होगा:

    'providers' => [
     ..
     .. 
     ..
Yajra\DataTables\DataTablesServiceProvider::class,
    ]

और इस लाइन को उपनामों में भी जोड़ें:

यजरा\DataTables\Facades\DataTables::class

इस तरह प्रयास करें:

'aliases' => [
 ..
 ..
 ..
 ..
 'DataTables' => Yajra\DataTables\Facades\DataTables::class,
]

अंत में, ऊपर की तरह फ़ाइल (config\app.php) को सेव करें और फिर cmd या टर्मिनल खोलें और फॉलिंग कमांड का उपयोग करके ऐप कैश्ड फ़ाइल (जिसमें कॉन्फिग कैश शामिल है) को साफ़ करने का प्रयास करें:

php artisan optimize
0
Yacin Pishvaz 24 अगस्त 2021, 22:20