am working on a banking app, in my Laravel Model, i have a table called transactions.
In that table it has a column called to_id and from_id which is the id of the user that is sending money(from_id) and the id of who is receiving the money(to_id) which is linked to my User table,
here is the CreateTransactionsTable migration code
Schema::create('transactions', function (Blueprint $table) {
$table->bigIncrements('id');
$table->bigInteger('from_id')->unsigned();
$table->foreign('from_id')->references('id')->on('users');
$table->bigInteger('to_id')->unsigned();
$table->foreign('to_id')->references('id')->on('users');
$table->integer('Amount');
$table->enum('TransactionType', ['Credit', 'Debit']);
$table->enum('Status', ['Completed', 'Incomplete']);
$table->timestamps();
});
here is the CreateUserTable migration file code
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->string('AccountNumber')->unique();
$table->rememberToken();
});
Here is the code for the Transactions Model
class Transactions extends Model{
public function users(){
return $this->belongsTo('App\Users');
}
}
Here is the code for the Users Model
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable{
use Notifiable;
protected $fillable = [
'name', 'email', 'password', 'Amount',
];
public function transactions(){
return $this->hasMany('App\Transactions');
}
}
here's my controller code
public function Transactions(){
$Trans = Transactions::all();
return view('Admin.TranAdmin')->with(['title'=>'Transaction History ', 'Trans'=>$Trans]);
}
here is my TranAdmin.blade.php code
<?php $no = 1; ?>
@foreach ($Trans as $Tran)
<tr>
<td>{{ $no++ }}</td>
<td>{{ $Tran->to_id }}</td>
<td>{{ $Tran->from_id->name }}</td>
<td>{{ $Tran->status }}</td>
<td>{{ $Tran->created_at->format('F jS, Y')}}</td>
<td></td>
</tr>
@endforeach
My problem now is that i cant get the name of the person that sent $Tran->from_id
and received $Tran->to_id
the money
am getting this error
Trying to get property of non-object (View: C:\xampp\htdocs\laravel Projects\bank\iscbank\resources\views\Admin\TranAdmin.blade.php) (View: C:\xampp\htdocs\laravel Projects\bank\iscbank\resources\views\Admin\TranAdmin.blade.php)
i checked online but i saw was to do $Tran->User->name
but since i got two columns that is linked to the users table, how can i do it
you will need to define 2 more relationships on the Transaction model.
like below
as of now, you are trying to access properties of the relation from the attributes from the model (eg : when you do this$Trans->from_id
, you are simply getting the data, not the relation.) rather you need to access the relation by defining them in the model first and then call the properties on it.
class Transactions extends Model{
public function from(){
return $this->belongsTo('App\Users','from_id', 'id');
}
public function to(){
return $this->belongsTo('App\Users', 'to_id', 'id');
}
//maybe you dont need the user relationship at all
}
and then in the template, you use it like follows
$transaction->to->name;
$transaction->from->name;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With