iT邦幫忙

0

想問問 meekro ,怎麼寫能做到「當有 key 的再更新?」 php

  • 分享至 

  • xImage

https://meekro.com/

假設我今天有三個 key

status
name
sort

當我下

DB::update(
            $this->dbName, [
                'name' => $post['name'],
                'sort' => $post['sort'],
                'status' => $post['status'],
            ],
            'id=%i', 
            $post['id']
        )

可以順利更新
但假設同一隻API
我只給 status 其他兩個不給,「因為其他兩個不需要更新」
此時他會說:
Column 'sort' cannot be null
Column 'name' cannot be null
是我本身 php 的寫法要改變,還是 meekro 有支援這種狀況?
我前端只有提交的是 status key 過來後端
那我能怎麼寫,可以使他不會因為其他 key 沒提供被阻止更新 status

看更多先前的討論...收起先前的討論...
柯柯 iT邦新手 3 級 ‧ 2020-07-30 14:35:54 檢舉
[
'name' => $post['name'] ?? '',
'sort' => $post['sort'] ?? '' ,
'status' => $post['status'] ?? '',
]
這樣給他空字串呢?
火爆浪子 iT邦研究生 1 級 ‧ 2020-07-30 14:40:30 檢舉
有想過,但這樣不就是把原本的值取代成空字串了嗎~
柯柯 iT邦新手 3 級 ‧ 2020-07-30 14:43:43 檢舉
$post ?? ''
isset($post) ? '' : $post
沒有設定$POST才變成空字串 有$POST值就用POST值
參考這篇 https://clouding.city/php/operator-diff/
雖然我也不確定是不是這個問題
火爆浪子 iT邦研究生 1 級 ‧ 2020-07-30 14:44:24 檢舉
而且我發現他 DB::query 回來的值,跟我資料庫的格式不同⋯⋯假設 sort 是 int,返回的卻是 string...
火爆浪子 iT邦研究生 1 級 ‧ 2020-07-30 14:47:33 檢舉
應該是說 name 和 sort 是空的的話,就不動,key 有 value 才更新
但 DB::update 不給設定空的值(無法略過)
柯柯 iT邦新手 3 級 ‧ 2020-07-30 14:53:01 檢舉
query 回傳應該都是string (我不確定 有前輩能說query回傳的資料型態)
update 不能給空值的話 會不會是資料表沒有允許null的關係?
Han iT邦研究生 1 級 ‧ 2020-07-30 15:07:08 檢舉
文件看起來是,只將要更新的值傳進陣列,不更新就不要放進去,如果只有status要更新,就傳[status => $status]就好

不知道問題是不是這樣? 還是我答非所問XD
火爆浪子 iT邦研究生 1 級 ‧ 2020-07-30 15:18:29 檢舉
哈哈可以用回答的嗎?我選最佳解答
Han iT邦研究生 1 級 ‧ 2020-07-30 15:39:58 檢舉
那我整理詳細XD
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
Han
iT邦研究生 1 級 ‧ 2020-07-30 15:43:23
最佳解答

DB::update()
This command doesn't add much value over doing an UPDATE with DB::query(), but it's here if you want it. In this example, the two commands are equivalent.

DB::update('tbl', ['age' => 25, 'height' => 10.99], "name=%s", $name);
DB::query("UPDATE tbl SET age=%i, height=%d WHERE name=%s", 25, 10.99, $name);

根據文件寫法,上面兩條是同效的語法,如果只要單純更新單一值,我覺得只傳入想更新的欄位即可

$updateArray = [] ;
if (isNameModify())
{
    $updateArray[] = ['name' => '...'] ;
}

// 需要更新的再push進去 $updateArray

DB::update($this->dbName, $updateArray, 'id=%i', $post['id']) ;
看更多先前的回應...收起先前的回應...
火爆浪子 iT邦研究生 1 級 ‧ 2020-07-30 16:08:57 檢舉

那你知道為什麼 DB::query 回來的值都是 string 嗎

Han iT邦研究生 1 級 ‧ 2020-07-30 17:24:35 檢舉

你語法怎麼寫? 有code嗎

火爆浪子 iT邦研究生 1 級 ‧ 2020-08-10 16:15:01 檢舉
$data = DB::query(
            "SELECT * FROM $this->dbName"
        );

        return $data;
火爆浪子 iT邦研究生 1 級 ‧ 2020-08-10 16:15:19 檢舉

就資料庫明明是 int ,但返回後收到的還是string⋯⋯

火爆浪子 iT邦研究生 1 級 ‧ 2020-08-10 17:08:19 檢舉

我要發表回答

立即登入回答