保护属性 – 永夜 https://www.shuijingwanwq.com 没有不值得去解决的问题,也没有不值得去学习的技术! Tue, 14 Mar 2023 01:09:08 +0000 zh-Hans hourly 1 https://wordpress.org/?v=7.0 在 Laravel 6 中,保护属性的分析 https://www.shuijingwanwq.com/2023/03/14/7474/ https://www.shuijingwanwq.com/2023/03/14/7474/#respond Tue, 14 Mar 2023 01:09:08 +0000 https://www.shuijingwanwq.com/?p=7474 浏览量: 87 1、在 Laravel 6 中,执行 updateOrCreate 方法,以更新现有模型或在不存在的情况下则创建新的模型。最后生成的 SQL 如下,缺少字段 checksum。如图1
在 Laravel 6 中,执行 updateOrCreate 方法,以更新现有模型或在不存在的情况下则创建新的模型。最后生成的 SQL 如下,缺少字段 checksum

图1



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、代码实现如下:


$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
打印变量 $extra,确定其中的字段 checksum 不为 null,说明并不是因为其值为 null 则在 SQL 语句中省略了字段 checksum

图2



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
编辑模型,在 $fillable 属性中添加 checksum。最后生成的 SQL 符合预期,字段 checksum 的值已经被插入

图3



    protected $fillable = [
        'asset_key',
        'theme_id',
        'content',
        'mime_type',
        'created_at',
        'updated_at',
        'category',
        'checksum',
        'schema'
    ];




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'
  )


]]>
https://www.shuijingwanwq.com/2023/03/14/7474/feed/ 0