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 關注
- 215 瀏覽
添加回答
舉報