Laravel。我无法从列中读取数据

时间:2017-07-31 08:21:36

标签: php laravel

我有问题。 需要获取当前登录用户在表中创建数据的第一个日期。

工作示例:

$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.这是用户的所有行,但我想只得到最早的(第一个)。我怎么能这样做?

对不起我的英文,并提前感谢您的帮助。

4 个答案:

答案 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方法一起使用