доступ к дочернему атрибуту с отношением один ко многим - PullRequest
0 голосов
/ 02 мая 2019

У меня есть модели Member, Loan и Interestamount.Loan имеет hasMany отношения с Interestamount.Кажется, я не могу получить доступ к данным из Interestamount.

Я могу показать ссуду id и Interestamount в блейде, но не могу отсортировать Interestamount для данного Loan.

LoanController.php

public function loanInterest($criteria){
    //$loanData = Loan::all();
    $loanData =Loan::findOrFail($criteria);
    return view($this->_pagePath.'loan.loaninterest',compact('loanData'));
}

web.php

Route::any('loaninterest/{criteria?}','LoanController@loanInterest')
    ->name('loaninterest');

Loan.php

use Illuminate\Database\Eloquent\Model;
class Loan extends Model
{
    protected $fillable = [
        'amount',
        'interest',
        'status',
        'duration',
        'member_id',
        'loan_type_id',
        'interest_type_id',
        'loan_payment_type_id'
    ];

    // protected $appends = 'interest_amount

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

    public function interestamount()
    {
        return $this->hasMany(InterestAmount::class,'loan_id','id');
    }
}

InterestAmount.php

use Illuminate\Database\Eloquent\Model;
class InterestAmount extends Model
{
    protected $fillable = ['interestamount'];

    public function loan()
    {
        return $this->belongsTo(Loan::class,'loan_id','id');
    }
}

loan Interest.blade.php

<tr>
    <td>{{$loanData->member->name}}</td>
    @foreach($loanData->interestamount() as $int)
        <td>{{$int->interestamount}} </td>
    @endforeach     
</tr>

loan.blade.php

<a href="{{route('loaninterest', $loan->id) }}">Interest detail</a>

Ответы [ 3 ]

1 голос
/ 02 мая 2019

$loanData->interestamount() возвращает экземпляр построителя запроса вместо результата запроса.

Есть несколько способов получить результат от функции отношения.

Одним из них является вызов get() function

Exmaple

$loanData->interestamount()->get();

Другой способ - вызвать функцию отношения not as a function but as a property

Пример

$loanData->interestamount;

так в ваших блейд-файлах @foreach()

@foreach($loanData->interestamount as $int)
    <td>{{$int->interestamount}} </td>
@endforeach 
1 голос
/ 02 мая 2019

измените свой кредитный интерес на этот

<td>{{$loanData->member->name}}</td>
  @foreach($loanData->interestamount as $int)
   <td>{{$int->interestamount}} </td>
  @endforeach     
</tr>

Когда мы используем $loanData->interestamount(), это относится к построителю запросов, но когда мы используем $loanData->interestamount, он возвращает связанную коллекцию, такую ​​же как $loanData->interestamount()->get()

0 голосов
/ 02 мая 2019

Я не знаю причину, но я сделал это, и это сработало.

  <td>{{$loanData->member->name}}</td>
  @foreach($loanData->interestamount()->get() as $int)
 <td>{{$int->interestamount}} </td>
  @endforeach   
...