Laravel 对同一个表的两个引用

标签 laravel relationship has-many

我有一个包含 sender_id 和 receiver_id 列的交易表,它们都是用户的引用。

现在,我想为用户创建一个 hasMany 关系。 (所有用户的交易,无论是收到还是发送)

最佳答案

您可以为所有交易创建一个关系:

public function transactions() {
    return $this->hasMany(Transaction::class, 'sender_id')
        ->orWhere('transactions.receiver_id', $this->id);
}

但这不是一个非常优雅的解决方案,因为它会破坏预加载。

更好的解决方案是使用两个关系,然后合并它们:

public function senderTransactions() {
    return $this->hasMany(Transaction::class, 'sender_id');
}

public function receiverTransactions() {
    return $this->hasMany(Transaction::class, 'receiver_id');
}

public function getTransactionsAttribute() {
    return $this->senderTransactions->merge($this->receiverTransactions);
}

然后像这样使用它:

$transactions = $user->transactions;

关于Laravel 对同一个表的两个引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49480578/

相关文章:

mysql - Laravel - 数据库事务 - 超出锁定等待超时

php - Laravel 5.1 和 ovh 问题

laravel - 自定义 token 响应 Laravel Passport

iOS:跟随系统的核心数据模式

ruby-on-rails - ruby on rails,has_many,定义多态关系的类名

ios - 将 ASMX Web 服务以 XML 形式返回的数据加载到 iPhone/iPad 中会导致应用程序崩溃

php - 拉维尔 5.1 : Relationships with SQLite rowid?

java - 在 Java 中更新 ManyToMany jointable

ios - 我被数组困住了

properties - 通过关系访问 ember-data 的属性(不在模板中)