我想在一个Model方法中合并两个hasMany关系。这两种关系几乎完全相同,唯一的区别就是外键。
请注意,我不能简单地在两个关系上调用查询构建器get()
方法,因为我必须使用合并关系,而不是集合,例如我想稍后对合并后的关系进行排序,或者在其上调用->where()
。
以下是示例代码:
Friend.php
<?php
class Friend extends Model
{
/*
Database structure:
- id
- user_id
- friend_id
*/
public function user()
{
return $this->belongsTo('App\Models\User');
}
public function friend()
{
return $this->belongsTo('App\Models\User', 'friend_id');
}
}
user.php的
<?php
class User extends Model
{
/*
Database structure:
- id
[...]
*/
public function friends()
{
$friends_left = $this->hasMany('App\Models\Friend', 'friend_id');
$friends_right = $this->hasMany('App\Models\Friend', 'user_id');
// return single relation
}
}
答案 0 :(得分:1)
我知道这很糟糕但是......考虑将合并的集合转换为这样的新查询:
$collection1 = ...;
$collection2 = ...;
$collection = $collection1->merge($collection2);
$values = $collection->lists('id');
$query = User::whereIn('id',$values)->....and continue with your queries;