IRI 到底是什麼東西 ?? 我們可以看作是某張表下的某筆資料的身分,也可以拿來當作主表與副表間的鎖鏈
由於這次的篇章裡都沒有提到 Doctrine ORM ,
所以針對關聯只做說明,不做操作,怕多講了Doctrine 可能會記憶體爆滿..
一般我們兩張表關聯,通常是用主表的id當成附表的關聯,
假設今天主表叫做Box ,副表叫做Pencil , jasonld在處理關聯時,不是用一般的id欄位 ,
而是用 iri (@id) ,用上述做舉例,我在Box看見的Pencil 關聯會長成 /api/pencil/{id}
我們可以在api platform 頁面上的response看見
如果我們將IRI拿來當作主表與副表的鎖鏈,就會有些限制 ,
api platform 會在deserialize,也就是將json格式轉成物件寫入的時候去驗證我們的IRI是不是有效的,
怎麼樣的IRI是無效的呢?
假設今天我要更新一筆副表的資料,一定要提供副表自己的IRI,否則會被視為要刪除這筆副表的資料
又假設,我今天要判斷,我這張主表下一定要新增一筆副表的資料... 直接在關聯欄位上加上 NotBlank 嗎 ?
錯... 必須先把該欄位的nullable設定為true ,讓它可以為null ,
再加上notBlank判斷,而送出的request值要是null,才會達到驗證的效果 ,
為什麼是要先設定nullable才加上NotBlank呢?
因為validation的機制是在deserialize後執行的,如果沒有加nullable,它可是會森77報500給你看的哦!!
在假設我今天就是刻意要刪掉這筆副表資料,我只要在request的@id值給undefined就好了,
跟第一個假設大同小異,只是第一個假設是不小心刪掉資料而已...阿為什麼要分開講?
因為小菜鳥本人當初就是智商堪憂,不小心沒有送@id,造成資料誤刪的情形...
好險只是在開發的時候,測試機的資料沒有關係的~
這篇講了IRI的小觀念跟一個自己踩過的雷...
下一篇要來講Group這個東西,設定完群組,可以拿來用在validation跟http的那五種method上,
比如有些可以寫值,有些只能讀值...等等
主副表間的鎖鏈跟我心目中的鎖鏈不一樣R,我心中的大概是下面這樣吧...