Prithvi Tuladhar
Prithvi Tuladhar

Reputation: 73

How to access model function in view or blade file

I want to get interest amount which is multiple of amount and interest rate in a table "loan". I want to call the value from a table and used for display loan information.

I have tried using mutators in which case gives same error as mentioned below

Loan.php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Loan extends Model
{
    protected $fillable = ['amount', 'interest', 'status', 'member_id', 'loan_type_id', 'interest_type_id', 'loan_payment_type_id'];

    public function getInterestAmountAttribute()
    {
        return $this->amount * $this->interest;
    }

    public function member()
    {
        return $this->belongsTo(Member::class, 'member_id', 'id');
    }
}

loan.blade.php

<table class="table table-stripped">
    <thead>
    <tr>
        <th>Loan Id</th>
        <th>Amount</th>
        <th>Interest</th>
        <th>Interest Amount</th>
        <th>Interest Type</th>
        <th>Loan Type</th>
        <th>Status</th>
        <th>Payment Type</th>
        <th>Member</th>
        <th>Action</th>
    </tr>

    @foreach($loanData as $key=>$loan)
        <tr>
            <td>{{++$key}}</td>
            <td>{{$loan->amount}}</td>
            <td>{{$loan->interest}}</td>
            <td>{{ $loan->interest_amount}}</td>
            <td>{{$loan->interesttype->interest_type}}</td>
            <td>{{$loan->loantype->loan_type}}</td>
            <td align="center">

                <span class="bg bg-primary" style="border-radius: 10px;padding:2px 5px">{{$loan->status}}</span>

                <form action="{{route('update-loan-status')}}" method="post">
                    {{csrf_field()}}
                    <input type="hidden" name="criteria" value="{{$loan->id}}"/>
                    @if($loan->status== 1)
                        <button class="btn btn-success btn-xs" name="paid"><i class="fa fa-check"></i></button>
                    @endif
                    @if($loan->status== 0)
                        <button class="btn btn-danger btn-xs" name="unpaid"><i class="fa fa-close"></i></button>
                    @endif
                </form>
            </td>
            <td>{{$loan->paymentmethod->method}}</td>
            <td>{{$loan->member->name}}</td>
            <td>
                <a href="">Delete</a>
                <a href="">Edit</a>
            </td>
        </tr>
    @endforeach
    </thead>
</table>
{{$loanData->links()}}

This gives the following error:

Method Illuminate\Database\Eloquent\Collection::links does not exist.

when I remove brackets

 <td>{{$loan->getInterest}}</td>

the error is

App\Loan::getInterest must return a relationship instance.

LoanController.php

<?php

namespace App\Http\Controllers\Backend;

use App\Http\Controllers\Controller;
use App\Loan;
use App\Interest;
use App\LoanPaymentMethod;
use App\Member;
use App\Loantype;
use DB;

class LoanController extends Controller
{
    protected $_backendPath = 'backend.';
    protected $_pagePath = 'backend.pages.';
    protected $_data = [];

    public function index()
    {
        $loanData = Loan::orderBy('id', 'desc')->get();
        $loanData = Loan::paginate(10);
        $loanData = Loan::all();
        $memberData = Member::all();
        $loantypeData = Loantype::all();
        $paymentmethodData = LoanPaymentMethod::all();
        $interestData = Interest::all();
        $this->_data['loanData'] = $loanData;

        //$results = Loan::with('member')->get();
        //$dat->loan = Loan::with('member')->get();
        //$loan = Member::find($memberData)->loan;

        return view($this->_pagePath . 'loan.loan', $this->_data);

        //$userData = DB::table('members')->get();
        //return view('home',compact('userData'));
    }
}

Upvotes: 0

Views: 1683

Answers (3)

Harish Patel
Harish Patel

Reputation: 84

You should append that variable in model data Like

class Loan extends Model
{
     protected $appends = ['interest'];
}

Your accessor should like

public function getInterest()
{
  return $this->amount * $this->interest;
}

Access in blade file as you use above

<td>{{$loan->interest}}</td>

Upvotes: 0

Md.Sukel Ali
Md.Sukel Ali

Reputation: 3065

The right way to call an Accessor,

public function getModifiedInterestAttribute()    // first get then ModifiedInterest then Attribute
{
  return $this->amount * $this->interest;
}

Then you can call the Accessor like below,

<td>{{$loan->modified_interest }}</td>

You can see this for more details : https://laravel.com/docs/5.8/eloquent-mutators#defining-an-accessor

Upvotes: 1

Surender Singh Rawat
Surender Singh Rawat

Reputation: 919

Define your function as accessor in your Loan.php :

public function getGetInterestAttribute()
{
   return $this->amount * $this->interest;
}

Now you can access it , like this :

<td>{{ $loan->get_interest }}</td>

Upvotes: 1

Related Questions