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

如何在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;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 数据排序,可选择排序方向
  • ¥15 修改一下代码,考虑进程到达时间不同的情况
  • ¥15 华为nova10pro ,关闭热动热点用量记录
  • ¥15 树莓派ubuntu使用conda就提示core dumped
  • ¥15 帮我看看这是个啥题,带解题过程和结果,条件如下FCF = 290471.33 g1 = 15% r = 8% g2 = 4% n = 5
  • ¥15 edem模拟颗粒不显示或者生成失败
  • ¥15 Python代码编写
  • ¥15 php 将rtmp协议转hls协议,无法播放
  • ¥20 python代码编写
  • ¥20 使用MPI广播数据遇到阻塞