Php Laravel合并关系一个表

Php Laravel合并关系一个表,php,laravel,relational-database,Php,Laravel,Relational Database,我有一个型号用户。它有两种关系方法 public function destinationTransaction() { return $this->hasManyThrough( Transaction::class, Account::class, 'object_id', 'destination_id' )->where('object_t

我有一个型号用户。它有两种关系方法

 public function destinationTransaction()
    {
        return $this->hasManyThrough(
            Transaction::class,
            Account::class,
            'object_id',
            'destination_id'
        )->where('object_type', User::class);
以及:

它们之间的区别仅在于第二个键(目的地id和来源id)

我想创建方法transactions,它将返回结果
sourceTransaction
destinationTransaction

示例:

public function transaction()
{
    $desTrn = $this->destinationTransaction;
    $srTrn= $this->sourceTransaction;

    // Merge collections and return single collection.
    return $competitionsHome->merge($srTrn);
}
此方法不适合,因为它返回数组


也许您可以通过某种方式编写带有联接的查询?

事务()
方法(未测试)中尝试union:

public function transaction()
{
    return $this->destinationTransaction()->union($this->sourceTransaction()->toBase());
}

似乎
用户
通过
对象id
拥有许多
帐户
帐户
通过
源id
目标id
拥有许多
交易
,您希望将这两个合并为一个

您可以使用
join
连接它们:

公共函数事务(){
返回帐户::join('users','users.id','accounts.object\u id'))
->其中('accounts.object\u id',$this->id)
->其中('accounts.object_type',User::class)
->join('transaction AS destination'、'destination.id'、'accounts.destination\u id')
->join('transaction AS source'、'source.id'、'accounts.source\u id')
//现在,您可以选择具有别名的目标列和源列:
->选择RAW('destination.*,source.column作为source\u column,…'))
->得到()
}

不太清楚,您的
transaction()
方法使用
destinationTransaction
sourceTransaction
返回集合,这不是您想要的?请解释结果以便我们提供帮助。我需要将两个关系合并为一个。您是指一个对象中的所有两个关系属性吗?是,请帮我看一下id是什么,它们来自不同的表,并且都是命名id,您想使用不同的名称,还是选择一个?您好,我有arror SQLSTATE[21000]:基数冲突:1222使用的SELECT语句具有不同的列数,这意味着联合中的两个语句尝试
SELECT
不同的列数。请从查询日志或堆栈跟踪中提供实际的SQL查询。“(在<代码>帐户<代码>id<代码>交易<代码>目的地id<代码>中选择*从<代码>交易<代码>内部联接<代码>帐户<代码>内部联接<代码>帐户<代码>对象id<代码>=?和<代码>对象类型<代码>=?)联合,其中<代码>帐户<代码>删除处<代码>为空(在
账户
id
交易
交易
源id
中选择*from
交易
内部联接
账户
账户
处删除的
账户为空且
账户
对象id
=?和
对象类型
=?)请帮助我)
public function transaction()
{
    return $this->destinationTransaction()->union($this->sourceTransaction()->toBase());
}