Laravel 两个引用相同 table
Laravel two references to same table
我有一个包含 sender_id 和 receiver_id 列的交易表,它们都是用户的引用。
现在,我想为用户创建一个 hasMany 关系。
(所有用户的交易,无论是收到还是发送)
在您的用户模型和交易模型中创建类似 belongsTo 的发送方和接收方 hasMany 关系
User.php
public function transactions(){
return $this->hasMany(Transactions::class);
}
交易
public function sender(){
return $this->belongsTo(User::class, 'sender_id');
}
public function receiver(){
return $this->belongsTo(User::class, 'receiver_id');
}
您可以为所有交易创建一个关系:
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;
我有一个包含 sender_id 和 receiver_id 列的交易表,它们都是用户的引用。
现在,我想为用户创建一个 hasMany 关系。 (所有用户的交易,无论是收到还是发送)
在您的用户模型和交易模型中创建类似 belongsTo 的发送方和接收方 hasMany 关系
User.php
public function transactions(){
return $this->hasMany(Transactions::class);
}
交易
public function sender(){
return $this->belongsTo(User::class, 'sender_id');
}
public function receiver(){
return $this->belongsTo(User::class, 'receiver_id');
}
您可以为所有交易创建一个关系:
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;