我有问题。 需要获取当前登录用户在表中创建数据的第一个日期。
工作示例:
$howMuchIPlay = Game::all('user_id')->where('user_id', '=', Auth::user()->id)->count();
不工作示例:
$firstVoteInGame = Game::all('created_at')->first()->where('user_id','=', Auth::user()->id);
当我使用count()函数时,我得到值38.这是用户的所有行,但我想只得到最早的(第一个)。我怎么能这样做?
对不起我的英文,并提前感谢您的帮助。
答案 0 :(得分:2)
$firstVoteInGame = Game::where('user_id', '=', Auth::user()->id)->oldest()->first();
这将从当前经过身份验证的用户获取最早(最早)的记录。
答案 1 :(得分:1)
你的订单错了。
您应首先按用户ID限制。
然后按降序创建顺序,这样最老的就在顶部。或者,如果您想要最新的订单,请按'desc'
而不是'asc'
然后得到第一个。
Game::where('user_id','=', Auth::user()->id)->orderBy('created_at','asc')->first();
你做的是:
从集合中的数据库中获取所有记录 从索引0收集第一个可能的记录 通过where查询限制模型对象(因为你在模型对象中而不是集合或查询构建器实例,所以它会失败;)
答案 2 :(得分:1)
您的不工作示例 public class DynamoDbInputFormat implements InputFormat, Serializable {
@Override
public InputSplit[] getSplits(@NonNull final JobConf job, final int numSplits) throws IOException {
final int splits = Integer.parseInt(requireNonNull(job.get(NUMBER_OF_SPLITS), NUMBER_OF_SPLITS
+ " must be non-null"));
return IntStream.
range(0, splits).
mapToObj(segmentNumber -> new DynamoDbSplit(segmentNumber, splits)).
toArray(InputSplit[]::new);
}
从$firstVoteInGame = Game::all('created_at')->first()->where('user_id','=', Auth::user()->id);
开始。
这意味着返回了所有Game::all('created_at')
,但这些仅限于'created_at'列(请参阅文档here)。
由于您将结果限制在'created_at'列,因此Eloquent现在无法将'user_id'列与经过身份验证的用户ID进行比较。
此外,即使您要选择所有列(通过执行Game
),您也会调用Game::all()
,之后您只剩下第一行。
你说你想要
获取当前登录用户在表格中创建数据的第一个日期。
这将通过以下方式完成:
->first()
答案 3 :(得分:0)
为什么使用'created_at'进行排序,因为简单/正确的方法是使用主键,因为您可以这样做:
$firstVoteInGame = Game::where('user_id','=', Auth::user()->id)->orderBy('id', 'desc')->first();
如果你还想要'created_at',你可以试试:
$firstVoteInGame = Game::where('user_id','=', Auth::user()->id)->orderBy('created_at', 'desc')->first();
TIP
- Eloquent all
方法将返回模型表中的所有结果,因此请避免将其与first
方法一起使用