3 回答
TA贡献1812条经验 获得超5个赞
在您的控制器中,您正在循环结果集并bookId
在循环中为单个模型回显 。在 tinker 中,您正在检索结果,并且 tinker 将集合输出到控制台。在 tinker 中执行此操作应该会产生与您的控制器相同的输出:
App\Book::where('userId', 1)->first()->bookId;
同样,在 tinker 中,您正在检索结果集,而不是单个记录,并且许多附加数据,如模型详细信息等,将在控制台中打印。希望这个解释有帮助。
此外,您需要更正控制器中的错字。我假设您的模型名称是Book
,book
因此您应该使用模型的大写名称。
TA贡献1801条经验 获得超8个赞
然而,我离基地很远。问题出在我的模型中。当我更改它时,我打算将主键更改为“recordId”,但将其保留为“bookId”。
看起来 Laravel 会将该主键读取为整数。因此,当我运行代码时,它会看到 bookId 并认为它是主要的,然后将其转换为整数。所以实际上发生的事情是这样的:
$books = \App\book::where('userId',1)->get();
foreach ($books as $b) {
//$b->bookid = '7iraCwAAQBAJ'
echo intval($b->bookId);
//intval($b->bookId) = 7
}
我将主键更改为“recordId”并修复了所有问题。
TA贡献1828条经验 获得超3个赞
为了只获得一个结果,您将需要first()laravel 中的方法。它的作用是,它获取第一个记录并将其显示给您。此方法不会遍历(循环)您的结果集。
所以你在 Tinker 中的代码将是这样的:
$books = \App\Book::where('userId',1)->first()->bookId;
这将只返回第一个结果bookId。
Get()方法用于获取集合。集合作为数组出现。这就是为什么你会得到几组数据。将显示表中的所有字段并显示所有数据(取决于您提供的选项,例如where('userId', 1))。这就是所谓的集合。并且要迭代或循环访问集合,您将需要像在问题中所做的那样使用 foreach 循环。
foreach ($books as $b) {
echo $b->bookId;
}
这里的问题是你在 echo-ing $b->bookId。当您在 Laravel 中 echo 时,它会将字段数据显示为整数。就像说,如果你有 bookId 1000, 2000, 3000, 4000, 5000 结果将是10002000300040005000. 但是,如果您在控制器中执行以下操作:
foreach ($books as $b) {
echo "<li>" .$b->bookId. "<li>";
}
结果将是这样的:
1000
2000年
3000
4000
5000
如果您想获取单个 Item 的 bookId,您将执行以下操作(此示例假设您知道记录“id”):
$books = \App\Book::where('userId',1)->find(1)->bookId;
现在将显示 id=1 结果的 bookId。
希望这可以帮助。快乐编码:)
- 3 回答
- 0 关注
- 184 浏览
添加回答
举报