【发布时间】:2015-02-18 16:21:07
【问题描述】:
我有这个数据透视表:
+----+---------+-----------------+
| id | user_id | conversation_id |
+----+---------+-----------------+
| 1 | 2 | 48 |
+----+---------+-----------------+
| 2 | 1 | 48 |
+----+---------+-----------------+
我正在尝试寻找一种方法来检测两个用户是否在同一个对话中,如果是,则返回对话。有点像:
Conversation::with([1, 2]); // should return conversation 48
我的Conversation 类如下所示:
class Conversation extend Eloquent {
public function users() {
return $this->belongsToMany('User');
}
public function messages(){
return $this->hasMany('Message');
}
}
到目前为止,我有以下代码,但它很笨拙且非常无效,并认为必须存在一些更清洁的 Laravel 方式:
class Conversation {
public static function user_filter(Array $users) {
$ids = array();
foreach ($users as $user)
$ids[$user->id] = $user->id;
sort($ids);
foreach (self::all() as $conversation){ // loop through ALL conversations (!!!)
$u_ids = $conversation->users->lists('id');
sort ( $u_ids );
if ($u_ids === $ids)
return $conversation;
}
return null;
}
}
用法:
Conversation::user_filter([User::find(1), User::find(2)]); // returns conversation 48
有什么想法吗?
【问题讨论】:
标签: laravel laravel-4 eloquent pivot-table