Как получить доступ к функции модели в представлении или файле блейда - PullRequest
0 голосов
/ 15 апреля 2019

Я хочу получить сумму процентов, которая кратна сумме и процентной ставке в таблице «заем».Я хочу вызвать значение из таблицы и использовать для отображения информации о кредите.

Я пытался использовать мутаторы, в этом случае выдает ту же ошибку, как указано ниже

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()}}

Это приводит к следующей ошибке:

Метод Illuminate \ Database \Eloquent \ Collection :: links не существует.

при удалении скобок

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

ошибка

App \ Loan :: getInterestдолжен вернуть экземпляр отношения.

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'));
    }
}

Ответы [ 3 ]

1 голос
/ 15 апреля 2019

Правильный способ вызвать Accessor,

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

Затем вы можете позвонить Accessor, как показано ниже,

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

. Вы можете увидеть это для более подробной информации: https://laravel.com/docs/5.8/eloquent-mutators#defining-an-accessor

1 голос
/ 15 апреля 2019

Определите вашу функцию как аксессор в вашем Loan.php:

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

Теперь вы можете получить к нему доступ, например так:

<td>{{ $loan->get_interest }}</td>
0 голосов
/ 15 апреля 2019

Вы должны добавить эту переменную в данные модели Как:

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

Ваш аксессор должен иметь вид

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

Доступ в блейд-файле, как вы использовали выше

<td>{{$loan->interest}}</td>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...