在 Laravel 6 中,保护属性的分析
1、在 Laravel 6 中,执行 updateOrCreate 方法,以更新现有模型或在不存在的情况下则创建新的模型。最后生成的 SQL 如下,缺少字段 checksum。如图1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | insert into ` table ` ( `asset_key`, `theme_id`, `mime_type`, `created_at`, `updated_at`, `content`, ` schema `, `category` ) values ( 'apps/internal/back-top/app.json' , '989925b6-58d3-4fee-a50f-8cd084462bf6' , 'application/json' , '2023-03-03 09:21:47' , '2023-03-03 09:21:47' , '{\n \"title\": \"回到顶部\",\n \"description\": \"为页面增加返回到页面顶部的按钮,提高用户体验。\"\n}\n' , null , 'unknown' ) |
2、代码实现如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | $predicate = [ 'asset_key' => $to . $view [ 'asset_key' ], 'theme_id' => $themeId , ]; $extra = [ 'mime_type' => $view [ 'mime_type' ], 'created_at' => $view [ 'modified_at' ], 'updated_at' => $view [ 'modified_at' ], 'content' => $content , 'schema' => $schema , 'checksum' => $checksum , 'category' => $category ]; ThemeAsset::updateOrCreate( $predicate , $extra ); |
3、打印变量 $extra,确定其中的字段 checksum 不为 null,说明并不是因为其值为 null 则在 SQL 语句中省略了字段 checksum。如图2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | array(7) { ["mime_type"]=> string(16) "application/json" ["created_at"]=> object(Illuminate\Support\Carbon)#6487 (19) { ["endOfTime":protected]=> bool(false) ["startOfTime":protected]=> bool(false) ["constructedObjectId":protected]=> string(32) "000000004ec81aa8000000003e76cedb" ["localMonthsOverflow":protected]=> NULL ["localYearsOverflow":protected]=> NULL ["localStrictModeEnabled":protected]=> NULL ["localHumanDiffOptions":protected]=> NULL ["localToStringFormat":protected]=> NULL ["localSerializer":protected]=> NULL ["localMacros":protected]=> NULL ["localGenericMacros":protected]=> NULL ["localFormatFunction":protected]=> NULL ["localTranslator":protected]=> NULL ["dumpProperties":protected]=> array(3) { [0]=> string(4) "date" [1]=> string(13) "timezone_type" [2]=> string(8) "timezone" } ["dumpLocale":protected]=> NULL ["dumpDateProperties":protected]=> NULL ["date"]=> string(26) "2023-03-03 09:53:51.598327" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } ["updated_at"]=> object(Illuminate\Support\Carbon)#6487 (19) { ["endOfTime":protected]=> bool(false) ["startOfTime":protected]=> bool(false) ["constructedObjectId":protected]=> string(32) "000000004ec81aa8000000003e76cedb" ["localMonthsOverflow":protected]=> NULL ["localYearsOverflow":protected]=> NULL ["localStrictModeEnabled":protected]=> NULL ["localHumanDiffOptions":protected]=> NULL ["localToStringFormat":protected]=> NULL ["localSerializer":protected]=> NULL ["localMacros":protected]=> NULL ["localGenericMacros":protected]=> NULL ["localFormatFunction":protected]=> NULL ["localTranslator":protected]=> NULL ["dumpProperties":protected]=> array(3) { [0]=> string(4) "date" [1]=> string(13) "timezone_type" [2]=> string(8) "timezone" } ["dumpLocale":protected]=> NULL ["dumpDateProperties":protected]=> NULL ["date"]=> string(26) "2023-03-03 09:53:51.598327" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } ["content"]=> string(120) "{ "title": "回到顶部", "description": "为页面增加返回到页面顶部的按钮,提高用户体验。" } " ["schema"]=> NULL ["checksum"]=> string(40) "2a0fe2215b02b5738926ff93cde566d43ad8188e" ["category"]=> string(7) "unknown" } |
4、编辑模型,在 $fillable 属性中添加 checksum。最后生成的 SQL 符合预期,字段 checksum 的值已经被插入。如图3
1 2 3 4 5 6 7 8 9 10 11 | protected $fillable = [ 'asset_key' , 'theme_id' , 'content' , 'mime_type' , 'created_at' , 'updated_at' , 'category' , 'checksum' , 'schema' ]; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | insert into ` table ` ( `asset_key`, `theme_id`, `mime_type`, `created_at`, `updated_at`, `content`, ` schema `, `checksum`, `category` ) values ( 'apps/internal/back-top/app.json' , '989931f5-7e35-4943-b11d-00a0b900626c' , 'application/json' , '2023-03-03 09:56:07' , '2023-03-03 09:56:07' , '{\n \"title\": \"回到顶部\",\n \"description\": \"为页面增加返回到页面顶部的按钮,提高用户体验。\"\n}\n' , null , '2a0fe2215b02b5738926ff93cde566d43ad8188e' , 'unknown' ) |
近期评论