0

When I try to execute datatable with ajax in the TeacherController function show(Teacher $teacher) with foreign_key, I get Ajax Error even though in AssistanceTeacherController it does work in its index() function.

use App\Models\Teacher;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use DataTables;

class TeacherController extends Controller
{
    public function show(Teacher $teacher, Request $request) //or show(Request $request, Teacher $teacher)
    {
        if($request->ajax())
        {
            $assistance_teachers = DB::table('assistance_teachers')->query()
                ->where('teacher_id', $teacher->id)
                ->orderBy('id', 'desc');
            return DataTables::eloquent($assistance_teachers)
                                ->make(true);
        }
        return view('teacher.show',['teacher' => $teacher]);
    }

With this route::

Route::get('/teacher/{teacher}', [TeacherController::class, 'show'])->name('teacher.show');

Even if I split them into two functions, I get the same result.

    public function show(Teacher $teacher) 
    {
        return view('teacher.show',['teacher' => $teacher]);
    }

    public function ajaxshow(Request $request)
    {
        if($request->ajax())
        {
            $assistance_teachers = DB::table('assistance_teachers')->query()
                //->where('teacher_id', 1) //trying without foreign key
                ->orderBy('id', 'desc');
            return DataTables::eloquent($assistance_teachers)
                                ->make(true);
        }
    

With these routes:

Route::get('/teacherajaxshow/', [TeacherController::class, 'ajaxshow'])->name('teacherajaxshow');
Route::get('/teacher/{teacher}', [TeacherController::class, 'show'])->name('teacher.show');

The Ajax function:

    $('#datat').DataTable({
        processing: true,
        serverSide: true,
        ajax:"{{ route('teacherajaxshow') }}", // or route('teacher.show',$teacher->id)
        columns: [
            {data:'created_at', name:'created_at'},
            {data:'training_module', name:'training_module'},
            {data:'period', name:'period'},
            {data:'turn', name:'turn'},
            {data:'didactic_unit', name:'didactic_unit'},
            {data:'checkin_time', name:'checkin_time'},
            {data:'departure_time', name:'departure_time'},
            {data:'theme', name:'theme'},
            {data:'place', name:'place'},
            {data:'educational_platforms', name:'educational_platforms'},
            {data:'remarks', name:'remarks'},
        ]
    });

Repeating, this error doesn't occur in AssistanceTeacherController:

use App\Models\AssistanceTeacher;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Requests\StoreAssistanceTeacherRequest;
use App\Http\Requests\UpdateAssistanceTeacherRequest;
use DataTables;

class AssistanceTeacherController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index(Request $request)
    {
        if($request->ajax())
        {
            $assistance_teachers = AssistanceTeacher::query()
                ->orderBy('assistance_teachers.id', 'desc');
            return DataTables::eloquent($assistance_teachers)
                                ->addColumn('teacher_name',function (AssistanceTeacher $data){
                                    return $data->teacher->name .' '. $data->teacher->lastname;
                                })
                                ->editColumn('created_at', function(AssistanceTeacher $data) {
                                    return date('Y/m/d h:i A', strtotime($data->created_at));
                                })
                                ->editColumn('checkin_time', function(AssistanceTeacher $data) {
                                    return date('h:i A', strtotime($data->checkin_time));
                                })
                                ->editColumn('departure_time', function(AssistanceTeacher $data) {
                                    return date('h:i A', strtotime($data->departure_time));
                                })
                                ->make(true);
        }
        return view('assistance_teacher.index');
    }

//route: Route::get('/teacher', [TeacherController::class, 'index'])->name('teacher');
/* Ajax
$('#datat').DataTable({
        processing: true,
        serverSide: true,
        ajax:"{{ route('assistance_teacher') }}",
        columns: [
            {data:'created_at', name:'created_at'},
            {data:'teacher_name', name:'teacher_name'},
            {data:'training_module', name:'training_module'},
            {data:'period', name:'period'},
            {data:'turn', name:'turn'},
            {data:'didactic_unit', name:'didactic_unit'},
            {data:'checkin_time', name:'checkin_time'},
            {data:'departure_time', name:'departure_time'},
            {data:'theme', name:'theme'},
            {data:'place', name:'place'},
            {data:'educational_platforms', name:'educational_platforms'},
            {data:'remarks', name:'remarks'},
        ]
    });
*/

2 Answers 2

1

you are passing Database Query Builder instead of Eloquent Model. you need to pass Eloquent Model as you are passing in AssistanceTeacherController

if($request->ajax()) {
            $assistance_teachers = AssistanceTeacher::where('teacher_id', 1)
                ->latest('id');

            return DataTables::eloquent($assistance_teachers)
                                ->make(true);
}
Sign up to request clarification or add additional context in comments.

1 Comment

Hi, please accept the answer if you find it helpful. thanks
0

Yes, you need to use Eloquent Model, or you can use it like :

DataTables::of(DB::table('assistance_teachers'))->make(true);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.