如何合并同一个表中的两个hasMany关系?

时间:2015-08-28 09:38:34

标签: php laravel eloquent laravel-5.1

我想在一个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
  }
}

1 个答案:

答案 0 :(得分:1)

我知道这很糟糕但是......考虑将合并的集合转换为这样的新查询:

    $collection1 = ...;
    $collection2 = ...;
    $collection = $collection1->merge($collection2);
    $values = $collection->lists('id');
    $query = User::whereIn('id',$values)->....and continue with your queries;