首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关系模型Laravel 5的条件

关系模型Laravel 5的条件
EN

Stack Overflow用户
提问于 2016-05-09 19:21:44
回答 1查看 105关注 0票数 2

您好,谢谢您的时间和帮助。我有三张很简单的桌子。一个带有user_id的用户表,一个带有game_id以及其他字段(计划日期/时间)的游戏表,以及一个只有user_id和game_id字段的GamesAttendee表。我试图选择所有的游戏,用户是连接的,并只返回那些计划的未来/过去。

最后我要说的是:

代码语言:javascript
复制
$cur = GamesAttendee::where('user_id',$user_id)->pluck('game_id')->all();
$cur = Game::whereIn('id', $cur)->where('scheduled','>=',$now)->get();

但我觉得必须有一种更有效的方法来做到这一点。我环顾四周,尝试过各种各样的东西,比如急于装货和捣乱我的模型,但似乎没有什么效果。我觉得这是一个非常简单和基本的例子,非常普遍,我想知道这是怎么做的,实际上是用拉拉。

我试过:

$cur = Game::with(['attendees'=>function($q) use ($user_id){ return $q->where('user_id',$user_id); }])->where('scheduled','>=',$now)->get();

但这不是我想要的。我基本上想做的是:

代码语言:javascript
复制
SELECT * FROM GameAttendees 
JOIN `games` on games.id = GameAttendees.game_id 
WHERE GameAttendees.user_id = 'x' AND games.scheduled >= '2016/05/01' ;

我很快就记下了mysql代码,所以只需忽略任何错误。有什么想法吗?

谢谢。

更新:

通过在我的用户模型中添加以下内容解决了问题:

代码语言:javascript
复制
public function future_games()
{
        $now = gmdate('Y-m-d H:i:s',strtotime('+4 hours'));
        return $this->belongsToMany('App\Game','games_attendees')->where('scheduled','>=',$now);
}

然后,在我的控制器里,我能够做到:

代码语言:javascript
复制
$future_games = User::with('future_games')->get();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-10 12:30:52

首先,在游戏和用户模型中定义多到多的关系:

代码语言:javascript
复制
class Game extends Model {
  public function users() {
    return $this->belongsToMany(User::class, 'GameAttendees');
  }
}

class User extends Model {
  public function games() {
    return $this->belongsToMany(Game::class, 'GameAttendees');
  }
}

有了这一点,您应该能够得到所有的游戏,用户正在参加的:

代码语言:javascript
复制
$games = $user->games;

如果要添加一些附加条件,请执行以下操作:

代码语言:javascript
复制
$futureGames = $user->games()->where('scheduled','>=',$now)->get();

或者在用户模型中创建另一个关系:

代码语言:javascript
复制
class User extends Model {
  public function futureGames() {
    return $this->belongsToMany(Game::class, 'GameAttendees')->where('scheduled','>=',$now);
  }
}

并通过以下方式进入:

代码语言:javascript
复制
$futureGames = $user->futureGames;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37123812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档