コードを始める前に、日々直面する問題や嫌な経験を思い出す必要があります
ビジネスロジックを実装する際、以下のような同様のシナリオに遭遇することがよくあります
pdoAさんに確認( id=233) メンバーですか? もしそうなら、フィールド 'status' を 'active' に変更します。そうでない場合は、 削除します フレームワーク
がない場合、通常このように書かれます (すべての
をスキップします)次のコード Logic)// 首先查询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';
再操作可能なデータ
次に考える必要があります。これが、返されたデータがクエリ記事での変換のために関数 Cast() に入れられる理由ですカプセル化を使用した後にこれを行うことができます
// 首先查询A先生的数据, 获取他的身份 $a = User::find(233); // 判定是否存在该id和该id是否为会员 if($a & $a->member) // 是就修改字段 $b = $a->update(['status'=>'active']); else // 否就删除数据 $b= $a->delete();ログイン後にコピー
データベースのデータを変更する方法について
これは私自身の表面的な答えです一般的な状況では、条件付き構文を使用して、変更する必要があるデータの範囲を指定し、変更するデータをフィルターする必要があります書き換える必要はありません上記の説明によると例は3つあります
範囲を一切指定しない、
テーブル内のデータを全て変更する
update Actor set first_name = 'new data'
update Actor set first_name = 'new data' where first_name like '%L%'
key
または一意のキーに基づいて指定された単一の部分を変更します Dataupdate Actor set first_name = 'new data' where actor_id = 10
上記の3種類に従って、開発を開始できますupdate 関数、追記: 経験が浅いため、高度すぎる update ステートメントを理解できません/使ったこともありません。メッセージを残してください
最後の行に update 関数を追加してください
// 改写数据库数据 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"); }
.php
// 一种更快捷的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());
boolean true // 失败返回false
以上が独自のデータベース パッケージを作成する方法 (5)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。