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

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵