dongtuo3370
2019-04-12 08:15
浏览 120
已采纳

如何在laravel中链接多个外键

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\iscbankesources\views\Admin\TranAdmin.blade.php) (View: C:\xampp\htdocs\laravel Projects\bank\iscbankesources\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

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dongzong8110 2019-04-12 08:27
    已采纳

    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;
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题