0

Hi I am beginner with Ajax at the Laravel. I wanted to fetch data with Laravel Eagerload function to my blade modal.

This is my Expenses Model

protected $fillable = [
    'name',
    'surname',
    'email',
    'password',
    'status',
    'role',
];

protected $hidden = [
    'password',
    'remember_token',
];

public function Expense () {

    return $this->hasMany(ExpensesModel::class);
}

This is my Expenses Model `

{ use HasFactory;

protected $table = 'expenses'; 

protected $fillable = [
    'id',
    'emp_id',
    'expense_input_date',
    'expense_type',
    'expense_category',
    'reason',
    'status'

];



public function UserExpense () {

    return $this->belongsTo(User::class,   'emp_id' );
} 

My controller

This is My controller function
  public function edit (Request $request) {

        $req_id = array('id' => $request->id);
    
        if($request->ajax()) { 
           
            $employee  = ExpensesModel::with('UserExpense')->where('id' ,$req_id)->first();
           
            return response()->json($employee);
          
        }
     
    } 

This is my blade script
` 

 function editFunc(id){
    $.ajax({
    type:"POST",
    url: "{{ url('/expenses/advancedtable/edit') }}",
    data: { id: id },
    dataType: 'json',

  
    success: function(res){
    $('#EmployeeModal').html("Edit Employee");
    $('#employee-modal').modal('show');
    $('#id').val(res.id);   
    $('#emp_id').val(res.name);
    $('#expense_input_date').val(res.expense_input_date);
    $('#expense_type').val(res.expense_type); 
    $('#expense_category').val(res.expense_category);
    $('#expense_slip_no').val(res.expense_slip_no);
    $('#expense_amount').val(res.expense_amount);
    $('#currency').val(res.currency);
    $('#description').val(res.description);


}
});
}  

I tried everyting but it does not work. I wanted to retrive user name from User Model by using foreign key on the Expenses model emp_id.

is there something I missed somewhere can you help me with this.

Thank you.

4
  • Where is controller? Commented Jul 25, 2022 at 9:36
  • Your Relationship is wrong , Expense model you have to use user class & user model you have to use expense class Commented Jul 25, 2022 at 9:36
  • Khk Rzk I am using user class in expense model public function UserExpense () { return $this->belongsTo(User::class, 'emp_id' ); } Commented Jul 25, 2022 at 9:44
  • Amir Khan public function edit (Request $request) { $req_id = array('id' => $request->id); if($request->ajax()) { $employee = ExpensesModel::with('UserExpense')->where('id' ,$req_id)->first(); return response()->json($employee); } } Commented Jul 25, 2022 at 9:45

1 Answer 1

0

Here how its work. First of all change relationship in your User and Expenses model like this.

// User Model
public function userExpense() {
  return $this->hasMany(ExpensesModel::class,'emp_id','id');
}

// ExpensesModel
public function user() {
  return $this->hasOne(User::class,'id','emp_id');
}

Then change your controller function.

// controller function
public function edit (Request $request) {
  $req_id = $request->id;  
  $employeeExpense = ExpensesModel::with('user')->where('id' ,$req_id)->first();
  return response()->json($employeeExpense);
}

Then change your ajax sucess function.

// ajax sucsess function
success: function(res) {
  console.log(res); // to view your response from controller in webbrowser's console
  $('#EmployeeModal').html("Edit Employee");
  $('#employee-modal').modal('show');
  $('#id').val(res.id);   
  $('#emp_id').val(res.user.name); // it will print user name
  $('#expense_input_date').val(res.expense_input_date);
  $('#expense_type').val(res.expense_type); 
  $('#expense_category').val(res.expense_category);
  $('#expense_slip_no').val(res.expense_slip_no);
  $('#expense_amount').val(res.expense_amount);
  $('#currency').val(res.currency);
  $('#description').val(res.description);
}

when you use 'with' eloqunt method it will add relationship function name to your query result, so you want to get user details then you should be do like res.user.userfield this is applicable for hasOne only.

For other relationship you will refer to this https://laravel.com/docs/9.x/eloquent-relationships

Sign up to request clarification or add additional context in comments.

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.