今天把Eloquent Object和Query Builder的Object搞混了,繞了快一個小時。
一開始使用
下面為Model Post 和 User
User Class的 posts() method
就這樣,我以為我可以透過 $post->user->name 取得name的資料,沒有想到居然不行,
我想說laravel的ORM不是很強大嗎? 怎麼可能會抓不到user,
Debug步驟:
Step. 1 先找找看foreign key是否是錯誤的,沒有匹配到。
Step. 2 看看model的Name有沒有打錯
Step. 3 重新複習official document,看看有沒有哪裡理解錯誤。
Step. 4 上stack Overflow看看到底哪裡出問題。
後來找到下面這篇文章
https://stackoverflow.com/questions/42313991/category-relationship-in-laravel-undefined-property-stdclass
然後將撈取post的方式改為
Before
After
看出端倪了吧,原來是自己呆呆的使用query builder還妄想要透過query builder來達到Eloquent ORM的效果
兩者是完全不一樣的東西。
想說tutorial看這麼多應該沒問題了,看來有些事情還是要踩一踩才知道問題點,才能釐清更多觀念。
2019/03/04
另外發現類似的概念 StackOverFlow
https://stackoverflow.com/questions/28223289/difference-between-method-calls-model-relation-and-model-relation
連結中主要講述$user->post 和 $user->post()的差異
$user->post 相等於 $user->post()->get()
前者已經取出資料,後者為eloquent model還可以繼續做where() orderBy等資料庫操作(DML)語句,進行query。