关于ThinkPHP关联模型和视图模型的一些心得
视图模型更加类似一张表虚拟的表,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。对其中所引用的基础表来说,视图的作用类似于筛选,这是ThinkPHP手册上的说法
视图模型更加类似一张表虚拟的表,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。对其中所引用的基础表来说,视图的作用类似于筛选,这是ThinkPHP手册上的说法
其实说白了,视图模型就是mysql多表查询而已,视图模型不支持多表更新,删除
而关联模型是多个表查询以后的结果组合,会多次查询mysql,(在执行完主表查询以后,会有个_after_select)之类的操作,然后组合结果集。在一些情况下,关联模型的查询还是比较不错的。
以下是个人使用ThinkPHP的关联模型和视图模型的一些心得和比较
一:性能方面
视图模型,说白了就是关联查询,一次查询多表
关联模型,每次查询一张表,多次查询,然后组合结果集(插入,更新,删除也是一样的。)
个人觉得视图模型性能会好一些(不一定全部都是,没有具体测试过)
二:查询
如果是查询的话,强烈建议使用视图模型来做,写法简单,容易理解和更改,而关联模型的定义方式太多,而且结果集的处理,调试,都不如视图模型要方便。
三:插入,更新,删除
视图模型不支持,关联模型支持,但是在插入,更新的时候,不能使用Model的create方法,还有自动完成,自动更新都失效了,我自己重写了一个create,给大家一些提示,可以自己按照需要更改。**<br>
* 重载create方法,不过滤字段,并且生成需要数据<br>
*/<br>
function create($data = '', $type = '') {<br>
// 如果没有传值默认取POST数据<br>
if (empty($data)) {<br>
$data = $_POST;<br>
} elseif (is_object($data)) {<br>
$data = get_object_vars($data);<br>
}<br>
// 验证数据<br>
if (empty($data) || !is_array($data)) {<br>
$this->error = L('_DATA_TYPE_INVALID_');<br>
return false;<br>
}<br>
// 状态<br>
$type = $type ? $type : (!empty($data[$this->getPk() ]) ? self::MODEL_UPDATE : self::MODEL_INSERT);<br>
// 数据自动验证<br>
if (!$this->autoValidation($data, $type)) return false;<br>
// 表单令牌验证<br>
if (!$this->autoCheckToken($data)) {<br>
$this->error = L('_TOKEN_ERROR_');<br>
return false;<br>
}<br>
// 验证完成生成数据对象<br>
if ($this->autoCheckFields) { // 开启字段检测 则过滤非法字段数据<br>
$fields = $this->getDbFields();<br>
foreach ($data as $key => $val) {<br>
if (MAGIC_QUOTES_GPC && is_string($val)) {<br>
$data[$key] = stripslashes($val);<br>
}<br>
}<br>
}<br>
// 创建完成对数据进行自动处理<br>
$data=$this->autoOperation($data, $type);<br>
$data=$this->createData($data);<br>
// 返回创建的数据以供其他调用<br>
return $data;<br>
}<br>
<br>
/**<br>
* 自动表单处理<br>
* @access public<br>
* @param array $data 创建数据<br>
* @param string $type 创建类型<br>
* @return mixed<br>
*/<br>
private function autoOperation($data, $type) {<br>
if (!empty($this->options['auto'])) {<br>
$_auto = $this->options['auto'];<br>
unset($this->options['auto']);<br>
} elseif (!empty($this->_auto)) {<br>
$_auto = $this->_auto;<br>
}<br>
// 自动填充<br>
if (isset($_auto)) {<br>
foreach ($_auto as $auto) {<br>
// 填充因子定义格式<br>
// array('field','填充内容','填充条件','附加规则',[额外参数])<br>
if (empty($auto[2])) $auto[2] = self::MODEL_INSERT; // 默认为新增的时候自动填充<br>
if ($type == $auto[2] || $auto[2] == self::MODEL_BOTH) {<br>
switch (trim($auto[3])) {<br>
case 'function': // 使用函数进行填充 字段的值作为参数<br>
case 'callback': // 使用回调方法<br>
$args = isset($auto[4]) ? (array)$auto[4] : array();<br>
if (isset($data[$auto[0]])) {<br>
array_unshift($args, $data[$auto[0]]);<br>
}<br>
if ('function' == $auto[3]) {<br>
$data[$auto[0]] = call_user_func_array($auto[1], $args);<br>
} else {<br>
$data[$auto[0]] = call_user_func_array(array(&$this,<br>
$auto[1]<br>
) , $args);<br>
}<br>
break;<br>
case 'field': // 用其它字段的值进行填充<br>
$data[$auto[0]] = $data[$auto[1]];<br>
break;<br>
case 'ignore': // 为空忽略<br>
if ('' === $data[$auto[0]]) unset($data[$auto[0]]);<br>
break;<br>
<br>
case 'string':<br>
default: // 默认作为字符串填充<br>
$data[$auto[0]] = $auto[1];<br>
}<br>
if (false === $data[$auto[0]]) unset($data[$auto[0]]);<br>
}<br>
}<br>
}<br>
return $data;<br>
}<br>
<br>
/**<br>
* 生成关联模型需要的数据<br>
*/<br>
function createData($data) {<br>
foreach ($data as $k => $v) {<br>
if (in_array($k, $this->fields)) {<br>
$data['Article'][$k] = $v;<br>
unset($data[$k]);<br>
}<br>
}<br>
//删除多余字段<br>
unset($data['nid']);<br>
unset($data['create_date']);<br>
return $data;<br>
}
就是直接复制的原来的create方法,但是去掉了字段过滤,然后自动验证,自动完成后,createData方法生成最后的数据,我觉得官方应该修改一下这一块,就更好了。
From: http://www.jishutie.net/topic/350464
AD:真正免费,域名+虚机+企业邮箱=0元

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Découvrez la programmation Python avec des exemples de code d'introduction. Python est un langage de programmation facile à apprendre mais puissant. Pour les débutants, il est très important de comprendre les exemples de code d’introduction à la programmation Python. Cet article vous fournira quelques exemples de code concrets pour vous aider à démarrer rapidement. Imprimer HelloWorldprint("HelloWorld") Il s'agit de l'exemple de code le plus simple en Python. La fonction print() est utilisée pour afficher le contenu spécifié

Les variables PHP stockent les valeurs pendant l'exécution du programme et sont cruciales pour créer des applications WEB dynamiques et interactives. Cet article examine en profondeur les variables PHP et les montre en action avec 10 exemples réels. 1. Stocker l'entrée de l'utilisateur $username=$_POST["username"];$passWord=$_POST["password"]; Cet exemple extrait le nom d'utilisateur et le mot de passe de la soumission du formulaire et les stocke dans des variables pour un traitement ultérieur. 2. Définissez la valeur de configuration $database_host="localhost";$database_username="username";$database_pa

"Exemples de programmation en langage Go : exemples de code dans le développement Web" Avec le développement rapide d'Internet, le développement Web est devenu un élément indispensable dans diverses industries. En tant que langage de programmation doté de fonctions puissantes et de performances supérieures, le langage Go est de plus en plus privilégié par les développeurs en développement Web. Cet article expliquera comment utiliser le langage Go pour le développement Web à travers des exemples de code spécifiques, afin que les lecteurs puissent mieux comprendre et utiliser le langage Go pour créer leurs propres applications Web. 1. Serveur HTTP simple Commençons par un

L'exemple de code le plus simple du tri à bulles Java est un algorithme de tri courant. Son idée de base est d'ajuster progressivement la séquence à trier en une séquence ordonnée grâce à la comparaison et à l'échange d'éléments adjacents. Voici un exemple de code Java simple qui montre comment implémenter le tri à bulles : publicclassBubbleSort{publicstaticvoidbubbleSort(int[]arr){int

Guide d'interconnexion Huawei Cloud Edge Computing : exemples de code Java pour implémenter rapidement des interfaces Avec le développement rapide de la technologie IoT et l'essor de l'informatique de pointe, de plus en plus d'entreprises commencent à s'intéresser à l'application de l'informatique de pointe. Huawei Cloud fournit des services d'informatique de pointe, offrant aux entreprises des ressources informatiques hautement fiables et un environnement de développement pratique, facilitant ainsi la mise en œuvre des applications d'informatique de pointe. Cet article explique comment implémenter rapidement l'interface informatique de pointe Huawei Cloud via le code Java. Tout d’abord, nous devons préparer l’environnement de développement. Assurez-vous que le kit de développement Java est installé (

Titre : Du débutant à la maîtrise : implémentation du code des structures de données couramment utilisées dans le langage Go. Les structures de données jouent un rôle essentiel dans la programmation et constituent la base de la programmation. Dans le langage Go, il existe de nombreuses structures de données couramment utilisées, et maîtriser la mise en œuvre de ces structures de données est crucial pour devenir un bon programmeur. Cet article présentera les structures de données couramment utilisées dans le langage Go et donnera des exemples de code correspondants pour aider les lecteurs à démarrer et à maîtriser ces structures de données. 1. Array Array est une structure de données de base, qui est un groupe du même type.

Comment utiliser PHP pour écrire le code de la fonction de gestion des stocks dans le système de gestion des stocks La gestion des stocks est un élément indispensable dans de nombreuses entreprises. Pour les entreprises disposant de plusieurs entrepôts, la fonction de gestion des stocks est particulièrement importante. En gérant et en suivant correctement les stocks, les entreprises peuvent répartir les stocks entre différents entrepôts, optimiser les coûts d'exploitation et améliorer l'efficacité de la collaboration. Cet article explique comment utiliser PHP pour écrire du code pour les fonctions de gestion d'entrepôt et vous fournit des exemples de code pertinents. 1. Établissez la base de données avant de commencer à écrire le code de la fonction de gestion des entrepôts de stocks.

Guide de rédaction de code et exemples de la méthode de tri par sélection Java Le tri par sélection est un algorithme de tri simple et intuitif. L'idée est de sélectionner à chaque fois l'élément le plus petit (ou le plus grand) parmi les éléments non triés et de l'échanger jusqu'à ce que tous les éléments soient triés. Cet article fournira un guide d'écriture de code pour le tri des sélections et joindra un exemple de code Java spécifique. Principe de l'algorithme Le principe de base du tri par sélection est de diviser le tableau à trier en deux parties, triée et non triée. A chaque fois, le plus petit (ou le plus grand) élément est sélectionné dans la partie non triée et placé à la fin de la partie triée. Répétez ce qui précède
