Как связать более одного внешнего ключа в laravel

я работаю над банковским приложением, в моей модели Laravel у меня есть таблица с транзакциями.

В этой таблице есть столбец с именем to_id и from_id, который является идентификатором пользователя, отправляющего деньги (from_id), и идентификатором получателя денег (to_id), который связан с моей таблицей пользователей,

вот код миграции CreateTransactionsTable

    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();
    });

вот код файла миграции CreateUserTable

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();
        });

Вот код модели транзакций

class Transactions extends Model{
    public function users(){
        return $this->belongsTo('App\Users');
    }
}

Вот код для модели пользователей

<?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');
    }
}

вот мой код контроллера

public function Transactions(){
        $Trans = Transactions::all();
        return view('Admin.TranAdmin')->with(['title'=>'Transaction History ', 'Trans'=>$Trans]);
    }

вот мой код TranAdmin.blade.php

<?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

Моя проблема сейчас в том, что я не могу получить имя человека, который отправил $Tran->from_id и получил $Tran->to_id деньги

я получаю эту ошибку

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)

я проверил онлайн, но я увидел, что нужно сделать $Tran->User->name, но поскольку у меня есть два столбца, которые связаны с таблицей пользователей, как я могу это сделать

Разве вам не нужно get() на модели, прежде чем вы сможете использовать ее в представлении?

Qirel 12.04.2019 10:21

как, не понимаю

Eloike David 12.04.2019 10:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
6
2
98
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вам нужно будет определить еще 2 отношения в модели транзакции.

как ниже

на данный момент вы пытаетесь получить доступ к свойствам отношения из атрибутов модели (например: когда вы делаете это$Trans->from_id, вы просто получаете данные, а не отношение.) скорее вам нужно получить доступ к отношению, определив их сначала в модели, а затем вызывайте ее свойства.

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

}

а затем в шаблоне вы используете его следующим образом

$transaction->to->name;
$transaction->from->name;

Другие вопросы по теме