gpt4 book ai didi

php - 关系模型 Laravel 5 的条件

转载 作者:行者123 更新时间:2023-11-29 02:17:37 25 4
gpt4 key购买 nike

您好,在此先感谢您的宝贵时间和帮助。我有 3 个非常简单的表。一个带有 user_id 的用户表,一个带有 game_id 以及一些其他字段(预定日期/时间)的游戏表和一个只有 user_id 和 game_id 字段的 GamesAttendee 表。我正在尝试选择用户连接的所有游戏,并且只返回为 future /过去安排的游戏。

我最终选择的是:

$cur = GamesAttendee::where('user_id',$user_id)->pluck('game_id')->all();
$cur = Game::whereIn('id', $cur)->where('scheduled','>=',$now)->get();

但我觉得必须有一种更有效的方法来做到这一点。我环顾四周并尝试了各种方法,例如急切加载和只是弄乱我的模型,但似乎没有任何效果。我觉得这是一个非常简单和基本的案例,非常普遍,我想知道这实际上应该如何在 Laravel 中完成。

我试过:

$cur = Game::with(['attendees'=>function($q) 使用 ($user_id){
返回 $q->where('user_id',$user_id);
}])->where('预定','>=',$now)->get();

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

SELECT * FROM GameAttendees 
JOIN `games` on games.id = GameAttendees.game_id
WHERE GameAttendees.user_id = 'x' AND games.scheduled >= '2016/05/01' ;

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

谢谢。

更新:

通过将以下内容添加到我的用户模型中解决:

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);
}

然后在我的 Controller 中我能够做到:

$future_games = User::with('future_games')->get();

最佳答案

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

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');
}
}

有了它,您应该能够获得给定用户参加的所有游戏:

$games = $user->games;

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

$futureGames = $user->games()->where('scheduled','>=',$now)->get();

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

class User extends Model {
public function futureGames() {
return $this->belongsToMany(Game::class, 'GameAttendees')->where('scheduled','>=',$now);
}
}

并通过以下方式访问它们:

$futureGames = $user->futureGames;

关于php - 关系模型 Laravel 5 的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37123812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com