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