#php #laravel #eloquent #model #controller
#php #laravel #красноречивый #Модель #контроллер
Вопрос:
У меня есть модель банка, в которой есть поля ‘bank_name’, ‘account_name’ и ‘balance’. Другая модель транзакции заключается в том, что пользователь сначала выбирает банк и вводит opening_balance и transaction_amount, а closing_balance, который является «начальным балансом — transaction_amount» (-, в зависимости от дебета / кредита), становится «балансом» в модели банка. Я хочу показать баланс в определенном банке на странице bank.index, взяв closing_balance из таблицы транзакций. Я застрял здесь. Пока у меня есть:
Модель банка:
protected $fillable=['bank_name','account_name'];
public function transactions()
{
return $this->hasMany('AppTransaction');
}
Модель транзакции:
protected $fillable = ['bank_id','opening_balance','transaction_amount','isdebit','closing_balance'];
public function bank()
{
return $this->belongsTo('AppBank');
}
BankController:
public function index()
{ $banks = Bank::all();
//$bal_1 = Bank::find(1)->transactions()->latest()->first();
// I can show the balance in bank which has id 1 by this manually.
return view('bank.index', compact('banks','bal_1'));
}
Контроллер транзакций:
public function index()
{ $transactions = Transaction::all();
return view('transaction.index',compact('transactions'));
}
Страница Bank.index
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Bank Name</th>
<th scope="col">Account Name</th>
<th scope="col">Balance</th>
</tr>
</thead>
<tbody>
@foreach($banks as $i=>$bank)
<tr>
<th scope="row">{{ $i}}</th>
<td>{{$bank->bank_name}}</td>
<td>{{$bank->account_name}}</td>
<td>{{$bal_1->closing_balance}}</td>
</tr>
@endforeach
</tbody>
</table>
Ответ №1:
Вы можете определить другое отношение в модели банка, которое дает вам один объект модели вместо массива, подобного этому :
public function transaction()
{
return $this->hasOne('AppTransaction');
}
Затем вы можете использовать это отношение в своем представлении bank.index :
<td>{{$bank->transaction->closing_balance}}</td>
Комментарии:
1. transaction() — это простое отношение, поэтому вы можете добавить к нему области: latest() , OrderBy («что-то») …… и т. Д
2. если я добавлю ваши два комментария, то это ответ, который мне был нужен. верните $this-> hasOne(‘App Transaction’)-> latest(); Очень признателен. большое спасибо.