婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 詳解Laravel設置多態關系模型別名的方式

詳解Laravel設置多態關系模型別名的方式

熱門標簽:事業單位如何百度地圖標注 電銷招聘機器人 福泉電話機器人 熱線電話機器人 格陵蘭島地圖標注 天津營銷電話機器人加盟代理 地圖標注入哪個科目 太原極信防封電銷卡 南寧crm外呼系統平臺

作為 Laravel 的重度使用者肯定都對多態關系不默生,以官方文檔為例,文章有標簽,視頻有標簽,那么文章和視頻這些模型與標簽模型的關系就是 多態多對多(Many To Many (Polymorphic))

如果我們給 ID 為 1 的文章打上兩個標簽,數據庫標簽關系表的的存儲結果就是這樣子:

> select * from taggables;
+--------+-------------+---------------+
| tag_id | taggable_id | taggable_type |
+--------+-------------+---------------+
|  1 |   1 | App\Post  |
|  2 |   1 | App\Post  |
+--------+-------------+---------------+

相信有不少人和我一樣希望 taggable_type 的值不要直接用模型類名,而是使用表名: posts 。官方文檔的建議是:

use Illuminate\Database\Eloquent\Relations\Relation;

Relation::morphMap([
 'posts' => 'App\Post',
 'videos' => 'App\Video',
]);

https://laravel.com/docs/6.x/eloquent-relationships#custom-polymorphic-types

我們可以將這個定義寫到 AppServiceProvider 中,但是有一個非常嚴重的問題: 我們在新增或者刪除模型的時候,會很容易忘記去更新這個定義 。我已經至少出現這個問題 3 次了,所以我一直在糾結有沒有更好的方法,今天突然靈機一動,實現了一個看起來似乎是一個不錯的方式,分享給大家。

思路來源

我嘗試跟蹤了一遍源碼,發現模型中有一個方法 getMorphClass ,多態關聯的時候,就是用它來取目標對象的類型名稱的,默認返回類名:

public function getMorphClass()
{
 $morphMap = Relation::morphMap();
 if (! empty($morphMap)  in_array(static::class, $morphMap)) {
  return array_search(static::class, $morphMap, true);
 }
 return static::class;
}

那么,只要我們在模型中覆蓋這個方法便可以方便的實現目標了。

實現目標

我們有兩個選擇去實現它:

  1. 創建一個模型基類覆蓋這個方法,所有的模型都來集成它即可;
  2. 創建一個 trait,在需要的模型中引入它。

我當然會選擇 trait 方式來實現,不管從定義還是代碼耦合度上,使用 trait 來解決這類特性需求都是再適合不過了,如果你對 trait 還不太熟悉,可以閱讀我之前的文章: 《我所理解的 PHP Trait》

我們的目標是使用表名來做為關系類別名,那么在模型中如何獲取表名呢,直接使用模型的 getTable 即可,那么整個 trait 的實現如下:

app/Traits/UseTableNameAsMorphClass.php
?php
namespace App\Traits;
trait UseTableNameAsMorphClass
{
 public function getMorphClass()
 {
  return $this->getTable();
 }
}

然后在我們需要用到關系類型的模型中引入它即可:

?php
namespace App;
use App\Traits\UseTableNameAsMorphClass;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
 use UseTableNameAsMorphClass;

 //...
}

友情提示

當然,如果你習慣給表名加前綴,或者你的表名與模型名不太一致,那么,你只需要修改 trait 中 getMorphClass 的實現即可,我個人的習慣是模型名就是表名的單數,不帶前綴。

總結

以上所述是小編給大家介紹的Laravel設置多態關系模型別名的方式,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

您可能感興趣的文章:
  • Laravel5.1 框架模型查詢作用域定義與用法實例分析
  • Laravel5.1 框架模型工廠ModelFactory用法實例分析
  • Laravel5.1 框架模型軟刪除操作實例分析
  • Laravel5.1 框架模型創建與使用方法實例分析
  • Laravel 5框架學習之模型、控制器、視圖基礎流程
  • Laravel模型間關系設置分表的方法示例
  • Laravel關系模型指定條件查詢方法
  • Laravel 實現關系模型取出需要的字段
  • Laravel模型事件的實現原理詳解
  • Laravel框架模型的創建及模型對數據操作示例
  • Laravel使用模型實現like模糊查詢的例子
  • Laravel5.1 框架模型一對一關系實現與使用方法實例分析

標簽:佳木斯 阿克蘇 香港 郴州 金華 通化 自貢 寶雞

巨人網絡通訊聲明:本文標題《詳解Laravel設置多態關系模型別名的方式》,本文關鍵詞  詳解,Laravel,設置,多態,關系,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解Laravel設置多態關系模型別名的方式》相關的同類信息!
  • 本頁收集關于詳解Laravel設置多態關系模型別名的方式的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲成av人影院在线观看网| 国产精品国产三级国产aⅴ入口| 99精品视频中文字幕| 亚洲精品成人在线| 99久久精品费精品国产一区二区| 久久午夜色播影院免费高清 | 色综合久久综合网欧美综合网| 欧美精品777| 婷婷成人综合网| 欧美日韩国产首页| 蜜臀av性久久久久蜜臀av麻豆| 色综合久久88色综合天天6| 久久精品亚洲麻豆av一区二区| 国产麻豆视频一区| 国产精品天美传媒| 色婷婷香蕉在线一区二区| 国产女同性恋一区二区| 高清在线观看日韩| 综合色中文字幕| 欧美日韩免费不卡视频一区二区三区| 亚洲综合无码一区二区| 欧美一级黄色录像| 国产91露脸合集magnet| 17c精品麻豆一区二区免费| 91成人在线观看喷潮| 奇米777欧美一区二区| 26uuu国产电影一区二区| av中文字幕一区| 午夜伦欧美伦电影理论片| 欧美一级片在线看| 成人深夜视频在线观看| 亚洲国产精品久久不卡毛片| 日韩丝袜美女视频| 95精品视频在线| 精品一区二区av| 亚洲v日本v欧美v久久精品| 国产喂奶挤奶一区二区三区| 欧美精品自拍偷拍动漫精品| 国产.欧美.日韩| 狠狠色狠狠色综合日日91app| 男女性色大片免费观看一区二区| 久久夜色精品一区| 欧美日韩一区二区三区免费看| 日韩avvvv在线播放| 亚洲伦理在线免费看| 亚洲精品一区二区三区蜜桃下载| 色偷偷一区二区三区| 国产一区二区视频在线| 亚洲成在线观看| 自拍视频在线观看一区二区| xfplay精品久久| 欧美人xxxx| 欧美日韩精品福利| 欧美综合亚洲图片综合区| av不卡在线观看| 国产91在线|亚洲| 成人免费视频一区| 粉嫩绯色av一区二区在线观看 | 国产精品免费人成网站| 日韩欧美国产午夜精品| 欧美日韩国产经典色站一区二区三区 | 午夜精品久久久久久久久久| 国产精品国产三级国产aⅴ无密码| 久久久美女艺术照精彩视频福利播放| 欧美日韩成人高清| 欧美日韩不卡在线| 欧美日本在线播放| 欧美在线你懂得| 精品视频1区2区| 欧美日韩综合在线| 欧美日韩欧美一区二区| 欧美日韩一级二级三级| 欧美日韩日日骚| 91麻豆精品国产91久久久使用方法| 欧美日韩高清一区二区| 91精品国产品国语在线不卡| 欧美一区中文字幕| 精品国产免费人成电影在线观看四季 | 三级欧美在线一区| 国产婷婷精品av在线| 中文字幕中文字幕在线一区| 成人国产视频在线观看| 一区二区成人在线| 777精品伊人久久久久大香线蕉| 久久草av在线| 免费久久精品视频| 欧美曰成人黄网| 国产精品九色蝌蚪自拍| 国产精品亚洲视频| 日韩精品一区二区三区四区视频 | 国产精品初高中害羞小美女文| 蜜桃视频在线一区| 宅男在线国产精品| 日日夜夜精品视频免费| 欧美丝袜丝nylons| 亚洲综合一二区| 在线中文字幕一区二区| 亚洲免费在线视频一区 二区| 99久久精品国产毛片| 亚洲欧美日韩在线不卡| 91香蕉视频mp4| 亚洲色图丝袜美腿| 日本韩国一区二区三区视频| 亚洲最大色网站| 欧美剧情片在线观看| 天天射综合影视| 日韩一级大片在线观看| 久久国产精品99久久人人澡| 久久亚区不卡日本| 成人av网站在线观看免费| 国产精品女主播av| 日本韩国一区二区三区| 日韩福利电影在线| 精品国产91乱码一区二区三区 | 一本久久a久久精品亚洲| 亚洲伦理在线免费看| 8v天堂国产在线一区二区| 久久精品国产99国产| 国产女人18水真多18精品一级做 | 成人av资源站| 夜夜揉揉日日人人青青一国产精品| 色综合中文字幕| 日韩精品一二三区| 久久久久久久久久久99999| 国产69精品久久久久毛片| 亚洲精品网站在线观看| 欧美一级片免费看| 国产成人亚洲综合色影视| 亚洲欧洲中文日韩久久av乱码| 欧美日韩一区视频| 国产呦萝稀缺另类资源| 樱花草国产18久久久久| 精品久久久久久亚洲综合网 | 久久久久久久国产精品影院| 99久久综合99久久综合网站| 亚洲成av人片| 国产精品久久久久久妇女6080| 欧美日韩一区高清| 国产精品一二二区| 亚洲综合丝袜美腿| www国产精品av| 欧美视频完全免费看| 成人性生交大合| 奇米亚洲午夜久久精品| |精品福利一区二区三区| 成人欧美一区二区三区在线播放| 欧美精品乱码久久久久久按摩 | 国产日产欧美一区| 欧美日韩一区二区三区视频| 国产91富婆露脸刺激对白| 欧美96一区二区免费视频| 亚洲免费高清视频在线| 久久精子c满五个校花| 欧美男男青年gay1069videost | 午夜av一区二区| 中文字幕日韩av资源站| 精品久久久久久久久久久久久久久久久 | 欧美日韩在线亚洲一区蜜芽| 成人高清免费观看| 国产精品一区二区三区乱码 | 国产一区二区三区四区在线观看 | 日韩和欧美的一区| 亚洲特黄一级片| 国产日产精品一区| 欧美精品一区二区在线播放| 69av一区二区三区| 欧美日韩在线亚洲一区蜜芽| 色综合激情久久| 99re8在线精品视频免费播放| 国产成人精品免费视频网站| 国产一区二区精品久久| 久久精品国产999大香线蕉| 蜜桃视频第一区免费观看| 一二三四区精品视频| 最新国产の精品合集bt伙计| 中文字幕在线观看不卡视频| 欧美高清在线一区| 国产欧美一区视频| 日本一区二区免费在线 | 99re成人精品视频| 成人国产在线观看| 91小视频在线免费看| 99re热这里只有精品视频| 不卡视频在线看| 9i在线看片成人免费| 91在线国内视频| 91在线看国产| 欧美日韩国产一级| 欧美电影一区二区| 日韩欧美一区中文| 久久精品一区四区| 国产精品久久久久桃色tv| 最新日韩av在线| 亚洲精品成人精品456| 日韩精品国产欧美| 黄色小说综合网站| 成人h动漫精品| 欧美日韩在线播放三区| 欧美大片一区二区| 久久五月婷婷丁香社区|