請教一下高樓層學長:
為何我從 User 資料表中 使用 ORM 查詢時會出現如下問題:
一、以 where('id', '1')->get(); 方式:
$users = User::where('id', '1')->get();
return view('test.index', compact('users'));
二、以 $users = User::find(1); 方式:
$users = $users = User::find(1);
return view('test.index', compact('users'));
在 test/index.blade.php 中
一、可以正常顯示
二、卻報錯: Trying to get property 'id' of non-object
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
@foreach ($users as $user)
{{ $user->id }} <br>
@endforeach
</body>
</html>
我嘗試 dd(gettype($users));
結果卻都返回 object
請教一下 這是甚麼原理?
get()是一段資料集。
find的請求是一個記錄。
兩者請求的資料結構並不同。
認真來說。get拿到的就是多個記錄。
你把 get 換成 first。就是拿記錄的資料。
跟用find是一樣的資料串。
get拿到的值,我用json的方式來表現,會如下面這樣
[
{
id:1,
data:'data'
}
]
而find跟用first拿到的會是
{
id:1,
data:'data'
}
這樣是否明白
話說你摸 Laravel 也半年有了。
不該現在還搞不懂get跟find的應用差別了。
難不成你幾乎沒在用資料庫?
我學習的時間算一算已經超過一年,承您所言應該是要進入狀況了才對,為何會還沒有完全弄清楚Laravel,是因為自己剛學習 Laravel 時,連最基礎的計算機基礎都不懂,實在無法理解 Laravel,因此前陣子先去自學補充一下:php、mysql、js(jQ+ajax),現在才又回來學習Laravel,我其實也自我感覺有了很大的進步,這也要謝謝各位前輩不吝指導,藉此,再度鄭重謝謝大家。
其實,我知道
get() 與 all() 拿到的都是 collection 的對象
first() 與 find() 拿到的都是 1個對象
我比較疑惑的是 :
$users = User::find(1);
後 在 blade 要如何取值?
我老是得到
rying to get property 'id' of non-object
我覺得你還是沒搞懂。
如果依照你這邊的寫法
@foreach ($users as $user)
{{ $user->id }} <br>
@endforeach
你用find取值。它並不是一個資料集。
但你卻用foreach。
當然會報錯啊。
先搞懂一下。看完我上面給你看的資料表現。
再去思考你能不能用foreach。
天啊!!
不要用「對象」來理解。你會完全搞不懂。
這裏先說明一下名詞。
資料集就是1到多個記錄。(就算記錄只有1個也算資料集)
記錄就是單純的記錄。
get all 拿的是「資料集」
find first 拿到的是「記錄」
一般用foreach。是因為拿的是資料集。才會跑迴圈一筆一筆記錄取出來用。
但直接就是記錄了。就不需要跑迴圈了。
好的!非常謝謝不吝指教,我再來好好研究一下,先問下:
@foreach($users in $key => $value)
echo $key : $value
@endforeach
foreach 不是也能循環對象嗎? 我結果卻是:
Undefined offset: 1