집 >데이터 베이스 >MySQL 튜토리얼 >자신만의 데이터베이스 패키지를 작성하는 방법 (5)
코딩을 시작하기 전에 우리가 매일 직면하는 문제나 좋지 않은 경험을 떠올려야 합니다
비즈니스 로직을 구현할 때 다음과 같은 유사한 상황이 자주 발생합니다
A씨(id=233)가 회원인지 확인하세요. 그렇다면 '상태' 항목을 '활성'으로 수정하세요. 그렇지 않으면 deleteIt
은 일반적으로 프레임워크가 없을 때 이렇게 작성됩니다(다음 코드는 모든 pdo 로직을 건너뜁니다)
// 首先查询A先生的数据, 获取他的身份 $a = 'select * from users where id = 233'; // 判定是否为会员 if($a->member === true) // 是就修改字段 $b = 'update users set status = 'active' where id = 233'; else // 否就删除数据 $b= 'delete from users where id = 233';
참고로 이는 pdo의 모든 단계를 단순화했기 때문입니다. 좀 더 복잡한 비즈니스 로직을 생각해 보세요. 코드의 가독성은 0이고 재구성은 다음과 같습니다. 무능력
그러면 왜 이렇게 많이 써야 하는 걸까요?
데이터가 반환되면 함수 와 함께 제공되는 인스턴스는 특정 작업을 수행할 수 있습니다
이것이 쿼리 기사에서 반환된 데이터가 변환을 위해 Cast() 함수에 입력되는 이유입니다
패키지를 사용한 후 이렇게 할 수 있습니다
// 首先查询A先生的数据, 获取他的身份 $a = User::find(233); // 判定是否存在该id和该id是否为会员 if($a & $a->member) // 是就修改字段 $b = $a->update(['status'=>'active']); else // 否就删除数据 $b= $a->delete();
다음에는
데이터베이스 데이터를 어떻게 수정해야 할까요?
이것 내 자신의 피상적인 대답입니다
일반적인 상황에서는 조건 구문을 사용하여 수정해야 하는 데이터 범위를 지정하고 다시 쓸 필요가 없는 데이터를 필터링해야 합니다
위 설명에 따르면 세 가지 예가 있습니다
범위를 전혀 지정하지 않고, 테이블의 모든 데이터를 수정
update Actor set first_name = 'new data'
범위를 지정하고, 조건에 맞는 여러 데이터를 수정
update Actor set first_name = 'new data' where first_name like '%L%'
은 범위를 지정하고, ID를 기준으로 지정된 단일 데이터를 수정합니다. key 또는 고유 키
update Actor set first_name = 'new data' where actor_id = 10
위의 세 가지 유형을 기반으로 업데이트 기능 개발을 시작할 수 있습니다.
PS: 이해할 수 없습니다/ 경험이 없어서 너무 고급 업데이트 문을 사용해본 적이 없습니다. 메시지 남겨주세요
마지막 줄에 업데이트 기능 추가
// 改写数据库数据 public function update(array $values) { // 如果写保护已经开启,跳出错误 if($this->writeLock) throw new Exception("data is not allow to update"); // 编译update语句 $sql = $this->grammar->compileUpdate($this, $values); // 将所有变量的值合成一个数组, 其中包括条件语句部分 $bindings = array_values(array_merge($values, $this->getBindings())); // 返回改写结果,成功true失败false return $this->connector->update($sql, $bindings); }
마지막 줄에 compileUpdate 함수 추가
public function compileUpdate(Builder $query, $values) { // 循环$values, 记得引用 foreach ($values as $key => &$value) // 将所有$value改成对应的$key=? $value = $key.' = ?'; // 将$values中的之全部掏出在连接起来 $columns = implode(', ', array_values($values)); // 附上where语句如果有 // 由于更复杂的sql update语句我还没试过, 为了不坑人, 所以限制只有where语法有效 // 欢迎提供更复杂的where语句 $where = is_null($query->wheres) ? '' : $this->compileWheres($query); // 返回update语句 return trim("update $query->from set $columns $where"); }
함수 추가 save, 참조 아래 사용예
// 一种更快捷的update方式 public function save() { return $this->update((array)$this->data); }
지정된 데이터 수정
$a = Actor::where('first_name', 'ANGELINA') ->update(['last_name'=>'changed']); dd($a);
데이터 인스턴스 다시 조작
$a = Actor::where('first_name', 'ANGELINA') ->first(); dd($a->update(['last_name'=>'again']));
데이터 인스턴스 다시 조작, 또 다른 사용법
$a = Actor::where('first_name', 'ANGELINA') ->first(); $a->last_name = 'save'; dd($a->save());
결과 반환
으르르르위 내용은 자신만의 데이터베이스 패키지를 작성하는 방법 (5)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!