Laravel框架學習筆記之數據同步操做(sync()的使用)

閒話很少說,直接起飛:php

使用場景:laravel

在使用laravel框架開發的過程當中,咱們常常會遇到 三張表 之間 有關聯的操做,好比以下:數組

表1: 店鋪表 storebash

元素 類型 描述
store_id int 主鍵
store_name varchar(255) 名稱

表2: 店鋪標籤表 tag框架

字段 類型 描述
tag_id int 主鍵
tag_name varchar(255) 屬性名稱

表3: 店鋪與標籤的關係表 tag_group測試

字段 類型 描述
tag_id int 標籤id
store_id int 店鋪id

注意:店鋪表與標籤表示多對多的關係ui

表列出來之後,而後咱們會常常遇到一個這樣的操做:this

添加一個店鋪,而且會在添加的時候給店鋪掛載標籤spa

面對這樣的需求 咱們常規的作法是以下:code

<?php
//首先從表單中傳遞過來一個數組:
$param['store_name']='測試店鋪';//這是接收的店鋪名字
$data['tag_ids'] = [1,3,4,5];//這是選擇的標籤的id數組  

//而後首先 店鋪表中插入一條數據
$result = Store::create($param);  
//var_dump($result);

//遍歷選擇的標籤數組 綁定標籤與店鋪之間的關係
if(count($data['tag_ids'])>0) {
    foreach ($data['tag_ids'] as $value) {
        $res[] = TagGroup::create(['store_id'=>$result->store_id,'tag_id'=>$value]); //綁定關係
    }
}
?>

複製代碼

按照上面的代碼寫下來 估計在修改的店鋪標籤的時候 估計會炸掉! 由於首先要查 這個標籤綁定過沒 綁定了的 要刪除 並把沒有綁定過的再綁定上 多麻煩 因此 有需求就有解決方案! 以下所示咱們使用 sync() 來作關係:

<?php
//首先從表單中傳遞過來一個數組:
$param['store_name']='測試店鋪';//這是接收的店鋪名字
$data['tag_ids'] = [1,3,4,5];//這是選擇的標籤的id數組  

//而後首先 店鋪表中插入一條數據
$result = Store::create($param);  
//var_dump($result);

//這裏咱們不須要遍歷了 只須要這樣寫
$res = $result->tag->sync($data['tag_ids']); 
?>

複製代碼

接下來咱們須要在 Stroe model中 去定義一個關聯模型

<?php
class Store extend Model{
     public function tag() {
        return $this->belongsToMany(Tag::class,'tag_group','tag_id','store_id');
     }
    }
?>

複製代碼

這樣 咱們就能夠 很方便的去給店鋪 掛載標籤 或者屬性, sync() 爲咱們提供了 大部分的功能,好比在修改的時候他會自動去找,若是沒有的去綁定或者刪除...

相關文章
相關標籤/搜索