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'},
]
});
*/