【发布时间】:2015-11-22 22:19:29
【问题描述】:
我想在一个模型方法中合并两个 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
}
}
【问题讨论】:
-
根据定义,一个模型/表只有一个标识符,看起来 Friend 模型应该有两个标识符......这可能吗?
-
@Amarnasan 是的,我也发现了这个问题,但这并没有解决我的问题,因为它将两个集合合并为一个集合,这意味着我不能再对其调用查询方法。跨度>
-
但是你打算执行什么样的“查询方法”呢?能给我举个例子吗?因为我认为您不能在任何“hasMany”之后执行“get”。我的意思是,你不能这样做:$this->user()->get(),即使“user()”是标准的“hasMany”关系,因为它不会返回“query”对象,而是给定模型的对象集合。
-
我目前得到的是
Illuminate\Database\Query\Builder类型的对象(例如变量$friends_left来自该类型)
标签: php laravel eloquent laravel-5.1