欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > Laravel 實現(xiàn)數(shù)據(jù)軟刪除功能

Laravel 實現(xiàn)數(shù)據(jù)軟刪除功能

熱門標簽:江西手機自動外呼防封系統(tǒng)是什么 怎么向銷售公司推銷外呼系統(tǒng) 高德地圖標注家 廣東地市地圖標注 廣州防封卡外呼系統(tǒng)多少錢一個月 外呼系統(tǒng)撥打暫時無法接通 哪里辦理400電話 長春人工外呼系統(tǒng)服務(wù)商 仁和怎么申請400開頭的電話

對于任何一個模型,如果需要使用軟刪除功能,需要在模型中使用 Illuminate\Database\Eloquent\SoftDeletes 這個  trait 。軟刪除功能需要實現(xiàn)的功能有以下幾點:

1.模型執(zhí)行刪除操作,只標記刪除,不執(zhí)行真正的數(shù)據(jù)刪除

2.查詢的時候自動過濾已經(jīng)標記為刪除的數(shù)據(jù)

3.可以設(shè)置是否查詢已刪除的數(shù)據(jù),可以設(shè)置只查詢已刪除的數(shù)據(jù)

4.已刪除數(shù)據(jù)可以恢復(fù)

Model的軟刪除功能實現(xiàn)

Illuminate\Database\Eloquent\Model 中delete方法源碼:

public function delete()
{
 if (is_null($this->getKeyName())) {
  throw new Exception('No primary key defined on model.');
 }
 if (! $this->exists) {
  return;
 }
 if ($this->fireModelEvent('deleting') === false) {
  return false;
 }
 $this->touchOwners();
 $this->performDeleteOnModel();
 $this->fireModelEvent('deleted', false);
 return true;
}
protected function performDeleteOnModel()
{
 $this->setKeysForSaveQuery($this->newModelQuery())
 ->delete();
 $this->exists = false;
}

因為在子類中使用了 SoftDeletes trait,所以, SoftDeletes performDeleteOnModel 方法會覆蓋父類的方法,最終通過  runSoftDelete 方法更新刪除標記。

protected function performDeleteOnModel()
{
 if ($this->forceDeleting) {
  $this->exists = false;
  return $this->newModelQuery()->where(
    $this->getKeyName(), $this->getKey()
  )->forceDelete();
 }
 return $this->runSoftDelete();
}

protected function runSoftDelete()
{
 $query = $this->newModelQuery()
      ->where($this->getKeyName(), $this->getKey());
 $time = $this->freshTimestamp();
 $columns = [$this->getDeletedAtColumn() => $this->fromDateTime($time)];
 $this->{$this->getDeletedAtColumn()} = $time;
 if ($this->timestamps  ! is_null($this->getUpdatedAtColumn())) {
  $this->{$this->getUpdatedAtColumn()} = $time;
  $columns[$this->getUpdatedAtColumn()] = $this->fromDateTime($time);
 }
 $query->update($columns);
}

Model查詢過濾刪除數(shù)據(jù)

Laravel中允許在Model中 static::addGlobalScope 方法添加全局的 Scope 。這樣就可以在查詢條件中添加一個全局條件。Laravel中軟刪除數(shù)據(jù)的過濾也是使用這種方式實現(xiàn)的。

SoftDeletes trait中加入了 Illuminate\Database\Eloquent\SoftDeletingScope 全局的 Scope 。并在 SoftDeletingScope 中實現(xiàn)查詢自動過濾被刪除數(shù)據(jù),指定查詢已刪除數(shù)據(jù)功能。

public static function bootSoftDeletes()
{
 static::addGlobalScope(new SoftDeletingScope);
}

遠程關(guān)聯(lián)數(shù)據(jù)的軟刪除處理

Scope的作用只在于當前模型,以及關(guān)聯(lián)模型操作上。如果是遠程關(guān)聯(lián),則還需要額外的處理。Laravel遠程關(guān)聯(lián)關(guān)系通過 hasManyThrough 實現(xiàn)。里面有兩個地方涉及到軟刪除的查詢。

protected function performJoin(Builder $query = null)
{
 $query = $query ?: $this->query;
 $farKey = $this->getQualifiedFarKeyName();
 $query->join($this->throughParent->getTable(), $this->getQualifiedParentKeyName(), '=', $farKey);
 if ($this->throughParentSoftDeletes()) {
  $query->whereNull(
   $this->throughParent->getQualifiedDeletedAtColumn()
  );
 }
}

public function throughParentSoftDeletes()
{
 return in_array(SoftDeletes::class, class_uses_recursive(
  get_class($this->throughParent)
 ));
}
public function getRelationExistenceQueryForSelfRelation(Builder $query, Builder $parentQuery, $columns = ['*'])
{
 $query->from( $query->getModel()->getTable().' as '
  .$hash = $this->getRelationCountHash()
 );
 $query->join($this->throughParent->getTable(), 
  $this->getQualifiedParentKeyName(), '=', $hash.'.'.$this->secondLocalKey
 );
 if ($this->throughParentSoftDeletes()) {
  $query->whereNull($this->throughParent->getQualifiedDeletedAtColumn());
 }
 $query->getModel()->setTable($hash);
 return $query->select($columns)->whereColumn(
  $parentQuery->getQuery()->from.'.'.$query->getModel()->getKeyName(), '=', $this->getQualifiedFirstKeyName()
 );
}

performJoin 中通過中間模型關(guān)聯(lián)遠程模型,會根據(jù) throughParentSoftDeletes 判斷中間模型是否有軟刪除,如果有軟刪除會過濾掉中間模型被刪除的數(shù)據(jù)。

以上就是Laravel實現(xiàn)軟刪除的大概邏輯。這里有一個細節(jié),Laravel中軟刪除的標記是一個時間格式的字段,默認 delete_at 。通過是否為null判斷數(shù)據(jù)是否刪除。

但是有的時候,項目中會使用一個整形的字段標記數(shù)據(jù)是否刪除。在這樣的場景下,需要對Laravel的軟刪除進行修改才能夠?qū)崿F(xiàn)。

主要的方案是:

1.自定義 SoftDeletes trait,修改字段名稱,修改更新刪除標記操作;

2.自定義 SoftDeletingScope 修改查詢條件

3.自定義 HasRelationships trait,在自定義的 HasRelationships 中重寫 newHasManyThrough 方法,實例化自定義的 HasManyThrough 對象

總結(jié)

以上所述是小編給大家介紹的Laravel 實現(xiàn)數(shù)據(jù)軟刪除功能,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!

您可能感興趣的文章:
  • Laravel5.1 框架模型創(chuàng)建與使用方法實例分析
  • Laravel 5框架學(xué)習(xí)之模型、控制器、視圖基礎(chǔ)流程
  • Laravel模型事件的實現(xiàn)原理詳解
  • Laravel模型間關(guān)系設(shè)置分表的方法示例
  • laravel學(xué)習(xí)教程之關(guān)聯(lián)模型
  • laravel學(xué)習(xí)筆記之模型事件的幾種用法示例
  • Laravel框架模型的創(chuàng)建及模型對數(shù)據(jù)操作示例
  • laravel model模型處理之修改查詢或修改字段時的類型格式案例
  • Laravel 關(guān)聯(lián)模型-關(guān)聯(lián)新增和關(guān)聯(lián)更新的方法
  • Laravel 模型使用軟刪除-左連接查詢-表起別名示例
  • Laravel5.1 框架模型軟刪除操作實例分析

標簽:廈門 惠州 黔東 文山 梅河口 海北 濮陽 湘西

巨人網(wǎng)絡(luò)通訊聲明:本文標題《Laravel 實現(xiàn)數(shù)據(jù)軟刪除功能》,本文關(guān)鍵詞  Laravel,實現(xiàn),數(shù)據(jù),軟,刪除,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Laravel 實現(xiàn)數(shù)據(jù)軟刪除功能》相關(guān)的同類信息!
  • 本頁收集關(guān)于Laravel 實現(xiàn)數(shù)據(jù)軟刪除功能的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    伦理电影国产精品| 九色porny丨国产精品| 成人免费看黄yyy456| 少妇无套高潮一二三区| 日韩一区二区电影网| 亚洲成a人v欧美综合天堂| 91欧美激情一区二区三区成人| 亚洲少妇xxx| 国产日韩欧美制服另类| 国产麻豆日韩欧美久久| 国产馆在线观看| 国产无遮挡一区二区三区毛片日本| 久久99久久精品| 国产美女免费无遮挡| 欧美精品一区二区三区四区| 久久精品国产99久久6| 天天躁日日躁aaaa视频| 久久久一区二区三区捆绑**| 久久99精品久久久久久久久久久久| 精品无人区无码乱码毛片国产 | 老司机福利av| 日韩午夜小视频| 久久99精品久久久久| 日本黄色激情视频| 国产精品美日韩| 波波电影院一区二区三区| 色狠狠综合天天综合综合| 一区二区三区在线视频观看58| 91女人视频在线观看| 91n在线视频| 亚洲同性gay激情无套| 亚洲妇女无套内射精| 欧美日韩一级片在线观看| 午夜久久久久久久久| 性欧美丰满熟妇xxxx性仙踪林| 欧美精品一区二区三区蜜臀| 国产麻豆9l精品三级站| 人妻少妇精品一区二区三区| 一区二区日韩av| 这里只有精品在线观看视频| 欧美成人欧美edvon| 国产一区二区三区久久悠悠色av| 亚洲综合图片一区| 亚洲综合激情网| 97超碰在线免费观看| 亚洲国产精品ⅴa在线观看| 972aa.com艺术欧美| 欧美一区二区三区四区在线观看 | 午夜欧美2019年伦理| 精品国产av无码| 国产精品毛片大码女人| 亚洲美女精品视频| 久久网站最新地址| 91在线视频在线| 日韩精品在线一区| 成人高清视频免费观看| 欧美三片在线视频观看| 久久精品国产久精国产| 色综合网色综合| 免费成人你懂的| 一本大道久久a久久精二百| 五月天一区二区| 天天看片中文字幕| 日本午夜一本久久久综合| 亚洲精品卡一卡二| 天天色天天操综合| 性色av无码久久一区二区三区| 五月综合激情网| 精品人妻伦九区久久aaa片| 午夜激情久久久| 深夜福利影院在线观看| 免费成人美女在线观看.| 91国偷自产一区二区开放时间| 免费亚洲电影在线| 91福利社在线观看| 国内精品久久久久影院一蜜桃| 欧美日韩综合色| 国产激情91久久精品导航| 91麻豆精品久久久久蜜臀| 懂色av一区二区在线播放| 欧美电影免费观看高清完整版在线 | 欧美久久一二三四区| 国产精品一二一区| 91精品婷婷国产综合久久竹菊| 风流少妇一区二区| 日韩精品影音先锋| 亚洲成人福利视频| 潘金莲一级黄色片| 免费成人结看片| 欧美精品久久久久久久多人混战| 高清在线不卡av| 亚洲精品在线观| 亚洲第一黄色网址| 亚洲一区视频在线| a级片在线观看免费| 国产麻豆视频一区| 精品成a人在线观看| 欧美一级片黄色| 亚洲综合色区另类av| 欧美另类videoxo高潮| 激情av综合网| 日韩午夜在线观看视频| 国模无码视频一区| 一区二区三区久久| 日本高清成人免费播放| 国产成人综合亚洲网站| 2021久久国产精品不只是精品| 欧美精品欧美极品欧美激情| 亚洲精品一卡二卡| 色欧美日韩亚洲| 丁香激情综合五月| 欧美国产日韩在线观看| 久久久亚洲精品石原莉奈| av中文一区二区三区| 亚洲国产成人自拍| 免费成人美女女在线观看| 久久69国产一区二区蜜臀| 日韩欧美你懂的| 亚洲精品乱码久久| 婷婷久久综合九色综合绿巨人 | 国产成人免费av在线| 久久精品男人天堂av| 欧美激情视频二区| 国产一区二区不卡在线| 久久久不卡影院| 免费网站在线高清观看| 久久99精品国产.久久久久| 精品福利在线导航| 成年人在线免费看片| 九色综合国产一区二区三区| 久久久久一区二区三区四区| 丰满的亚洲女人毛茸茸| 国产乱码精品一品二品| 久久久三级国产网站| 91动漫免费网站| 懂色一区二区三区免费观看| 中文字幕一区二区三区精华液 | 日韩一区二区三区观看| 国产一级二级在线观看| 免费成人小视频| 国产日产欧美一区| 粉嫩av性色av蜜臀av网站| 99久久99久久精品国产片果冻| 亚洲精品成人少妇| 56国语精品自产拍在线观看| 日韩人妻无码一区二区三区| 国产在线精品一区在线观看麻豆| 国产日韩一级二级三级| 印度午夜性春猛xxx交| 91欧美一区二区| 日本最新不卡在线| 久久久久亚洲综合| 色综合一区二区三区| 国产精品91av| 免费人成在线不卡| 国产亚洲欧美日韩俺去了| 久久中文免费视频| 粗大的内捧猛烈进出视频| 日日摸夜夜添夜夜添亚洲女人| 精品粉嫩超白一线天av| 来吧亚洲综合网| 中文字幕avav| 日韩电影在线一区二区| 国产喂奶挤奶一区二区三区| 91福利精品第一导航| 野外性满足hd| 高清shemale亚洲人妖| 亚洲线精品一区二区三区| 精品粉嫩超白一线天av| 色综合天天综合色综合av| 影音先锋黄色资源| 国产成人av影院| 亚洲妇女屁股眼交7| 精品粉嫩aⅴ一区二区三区四区| 久久久精品视频免费观看| 老司机免费视频| 丁香激情综合五月| 日韩中文字幕91| 国产精品久久久久久久久免费樱桃 | 亚洲av综合一区二区| 国产激情精品久久久第一区二区| 亚洲午夜久久久久久久久久久| 精品国产一区二区在线观看| 国产探花在线播放| 在线精品一区二区三区| 成人一区在线观看| 日本特黄久久久高潮| 国产精品成人免费在线| 日韩一区二区影院| 色狠狠综合天天综合综合| 自拍偷拍视频亚洲| 无码人妻久久一区二区三区蜜桃| 国产精品一区二区三区四区| 亚洲精品菠萝久久久久久久| 久久久精品综合| 在线91免费看| 色综合色狠狠天天综合色| 波多野吉衣中文字幕| 国产精品一级无码| 国产91精品一区二区|