Tout d'abord, à propos de la relation entre les tables
1. Un à un
2. Un à plusieurs
Plusieurs à un
4. . Plusieurs à plusieurs
Distinguer la table parent de la table enfant
1. 🎜>2. "Many" C'est une table enfant
Comment gérer la relation un-à-plusieursCréer un champ (étranger clé) dans la table enfant pour pointer vers la table parent
Comment gérer les relations plusieurs-à-plusieursCréer une table intermédiaire pour convertir les relations "plusieurs-à-plusieurs" en "un-à-plusieurs"
Analyse de casTableau 1 : Table utilisateur ( it_user)
Tableau 2 : Tableau des détails de l'utilisateur (it_user_info)
Tableau 3 : Tableau des articles (it_article)
Tableau 4 : Tableau des pays (it_country)
Tableau 5 : Table des rôles utilisateur (it_role)
① Particulier
La table des utilisateurs (Tableau 1) et la table des détails (Tableau 2) ont une table des rôles relation
②Un à plusieurs
La table utilisateur (Tableau 1) et la table article (Tableau 3) sont une relation un à plusieurs
③Plusieurs à -one
La table des utilisateurs (Tableau 1) et la table des pays (Tableau 4) sont une relation plusieurs-à-un
④Plusieurs à plusieurs
L'utilisateur La table (Tableau 1) et la table des rôles (Tableau 5) sont la relation plusieurs-à-plusieurs
Création de la table utilisateur et données de testDROP TABLE IF EXISTS `it_user`;
CREATE TABLE `it_user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(64) DEFAULT NULL COMMENT '用户名',
`password` char(32) DEFAULT NULL COMMENT '密码(不使用md5)',
`country_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `国家id` (`country_id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of it_user
-- ----------------------------
INSERT INTO `it_user` VALUES ('1', 'xiaoming', '123456', '1');
INSERT INTO `it_user` VALUES ('2', 'xiaomei', '123456', '1');
INSERT INTO `it_user` VALUES ('3', 'xiaoli-new', '123', '1');
-- ----------------------------
-- Table structure for it_user_info
-- ----------------------------
DROP TABLE IF EXISTS `it_user_info`;
CREATE TABLE `it_user_info` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`tel` char(11) DEFAULT NULL,
`email` varchar(128) DEFAULT NULL,
`addr` varchar(255) DEFAULT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of it_user_info
-- ----------------------------
INSERT INTO `it_user_info` VALUES ('1', '13012345678', 'xiaoming@163.com', '北京');
INSERT INTO `it_user_info` VALUES ('2', '15923456789', 'xiaomei@163.com', '上海');
INSERT INTO `it_user_info` VALUES ('3', '18973245670', 'xiaoli@163.com', '武汉');
-- ----------------------------
-- Table structure for it_article
-- ----------------------------
DROP TABLE IF EXISTS `it_article`;
CREATE TABLE `it_article` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT NULL,
`content` text,
`user_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of it_article
-- ----------------------------
INSERT INTO `it_article` VALUES ('1', '世界那么大,我想去看看', '钱包那么小,总是不够', '1');
INSERT INTO `it_article` VALUES ('2', '我想撞角遇到爱', '却是碰到鬼', '2');
INSERT INTO `it_article` VALUES ('3', '哈哈哈哈', '嘻嘻嘻嘻', '1');
-- ----------------------------
-- Table structure for it_country
-- ----------------------------
DROP TABLE IF EXISTS `it_country`;
CREATE TABLE `it_country` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of it_country
-- ----------------------------
INSERT INTO `it_country` VALUES ('1', '中国');
INSERT INTO `it_country` VALUES ('2', '美国');
-- ----------------------------
-- Table structure for it_role
-- ----------------------------
DROP TABLE IF EXISTS `it_role`;
CREATE TABLE `it_role` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of it_role
-- ----------------------------
INSERT INTO `it_role` VALUES ('1', '开发');
INSERT INTO `it_role` VALUES ('2', '测试');
INSERT INTO `it_role` VALUES ('3', '管理');
-- ----------------------------
-- Table structure for it_user_role
-- ----------------------------
DROP TABLE IF EXISTS `it_user_role`;
CREATE TABLE `it_user_role` (
`user_id` int(11) DEFAULT NULL,
`role_id` int(11) DEFAULT NULL,
KEY `role_id` (`role_id`),
KEY `user_id` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of it_user_role
-- ----------------------------
INSERT INTO `it_user_role` VALUES ('1', '1');
INSERT INTO `it_user_role` VALUES ('1', '2');
INSERT INTO `it_user_role` VALUES ('1', '3');
INSERT INTO `it_user_role` VALUES ('2', '1');
INSERT INTO `it_user_role` VALUES ('3', '2');
Travail de préparation
1. Planification des itinérairesdans les itinéraires/ Écrivez l'itinéraire suivant sous web.php :
//ORM的关联关系 Route::get('/orm/relation/{mode}','ORM\UserController@relation');2. Écrivez la méthode de relation dans App/Http/Controllers/ORM/UserController.php
public function relation($mode)
{
switch ($mode){
case '1_1':
{
//一对一
}
break;
case '1_n':
{
//一对多
}
break;
case 'n_1':
{
//多对一
}
break;
case 'n_n':
{
//多对多
}
break;
default;
}
}
3.1 Utilisez la commande composer pour installer
composer require barryvdh/laravel-debugbar3.2 Modifiez le fichier config/app.php, chargez la barre de débogage dans laravel dans le projet et ajoutez-la au tableau 'providers' La configuration suivante :
Barryvdh\Debugbar\ServiceProvider::class,En plus d'installer l'outil de débogage de la barre de débogage, vous pouvez également utiliser la surveillance des requêtes : Ajoutez le code suivant à la méthode de démarrage des fournisseurs/AppServiceProvider.php
\DB::listen(function ($query) { var_dump($query->sql); var_dump($query->bindings); echo '<br>'; });Vous pouvez également imprimer l'instruction SQL exécutée . Individuel
1. Créez l'objet modèle Userinfo
Entrez le Ligne de commande cmd. L'exécution de la commande suivante dans le répertoire où se trouve le projet laravel
php artisan make:model Userinfogénérera Userinfo.php dans le répertoire App
2. Modifiez le fichier modèle Userinfo
. 🎜>
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Userinfo extends Model { protected $table = 'user_info'; protected $primaryKey = 'user_id'; protected $fillable = ['user_id','tel','email','addr']; public $timestamps = false; }
3. Écrivez UserModel et ajoutez la méthode individuelle
<?php namespace App; use Illuminate\Database\Eloquent\Model; class UserModel extends Model { protected $table = 'user';//真是表名 protected $primaryKey = 'id';//主键字段,默认为id protected $fillable = ['name','password'];//可以操作的字段 public $timestamps = false;//如果数据表中没有created_at和updated_id字段,则$timestamps则可以不设置, 默认为true public function Userinfo() { /* * @param [string] [name] [需要关联的模型类名] * @param [string] [foreign] [参数一指定数据表中的字段] * */ return $this->hasOne('App\Userinfo','user_id'); }
4. Écrivez UserController et appelez la méthode individuelle . 🎜>
public function relation($mode) { switch ($mode){ case '1_1': { //一对一 $data = UserModel::find(1)->Userinfo()->get(); dd($data); } break; default; } }
Un-à-plusieurs
1. Créer l'objet modèle d'article
Exécutez la commande
php artisan make:model Article
pour générer le fichier Article.php sous l'application
2 Écrivez le fichier de modèle d'article
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Article extends Model { protected $table = 'article'; protected $primaryKey = 'id'; protected $fillable = ['id','title','content','user_id']; public $timestamps = false; }
3. . Écrivez UserModel et ajoutez la méthode un-à-plusieurs
public function Artice() { return $this->hasMany('App\Article','User_id'); }
4 Écrivez le UserController et appelez la méthode un-à-plusieurs
public function relation($mode) { switch ($mode){ case '1_1': { //一对一 $data = UserModel::find(1)->Userinfo()->get(); dd($data); } break; case '1_n': { //一对多 $data = UserModel::find(1)->Artice()->get(); dd($data); } break; default; } } }
plusieurs-à-un
1. Créer le modèle de pays L'objet
exécute la commandephp artisan make:model Country
2. Écrivez le fichier de modèle de pays
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Country extends Model { protected $table = 'country'; //真实表名 protected $primaryKey = "id"; //主键id protected $fillable = ['id','name']; //允许操作的字段 public $timestamps = false; //如果数据表中没有created_at和updated_id字段,则$timestamps则可以不设置, 默认为true }
3. Écrivez UserModel et ajoutez la méthode plusieurs-à-un
public function Country() { return $this->belongsTo('App\Country','country_id'); }
4. UserController et méthode d'appel
public function relation($mode) { switch ($mode){ case '1_1': { //一对一 $data = UserModel::find(1)->Userinfo()->get(); dd($data); } break; case '1_n': { //一对多 $data = UserModel::find(1)->Artice()->get(); dd($data); } break; case 'n_1': { //多对一 $data = UserModel::find(1)->Country()->get(); dd($data); } break; default; } } }
Many-to-Many
Créer un objet modèle de rôle
Exécuter la commandephp artisan make:model RoleExécuter la commande
php artisan make:model User_role
2. Écrire le modèle de rôle
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Role extends Model { protected $table = 'role'; protected $primaryKey = "id"; protected $fillable = ['name']; public $timestamps =false; }Écrire le modèle de rôle utilisateurComme il n'y a pas de champ de clé primaire dans la table, deux champs sont nécessaires
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User_role extends Model { protected $table = 'user_role'; public $timestamps =false; }
3 Écrivez le UserModel et ajoutez la méthode plusieurs-à-plusieurs
public function Role(){ /* * 第一个参数:要关联的表对应的类 * 第二个参数:中间表的表名 * 第三个参数:当前表跟中间表对应的外键 * 第四个参数:要关联的表跟中间表对应的外键 * */ return $this->belongsToMany('App\Role','user_role','user_id','role_id'); }.
4. Écrivez UserController et appelez la méthode plusieurs-à-plusieurs
public function relation($mode) { switch ($mode){ case '1_1': { //一对一 $data = UserModel::find(1)->Userinfo()->get(); dd($data); } break; case '1_n': { //一对多 $data = UserModel::find(1)->Artice()->get(); dd($data); } break; case 'n_1': { //多对一 $data = UserModel::find(1)->Country()->get(); dd($data); } break; case 'n_n': { //多对多 $data = UserModel::find(2)->Role()->get(); dd($data); } break; default; } }
Résumé :
Une paire Comment en utiliser une : hasOne. ()2. Comment utiliser un-à-plusieurs : hasMany()3 Comment utiliser plusieurs-à-un : appartient à()4. Many Comment utiliser many : AppartientToMany()Site Web chinois PHP, un grand nombre deTutoriels d'introduction à Laravel gratuits, bienvenue pour apprendre en ligne !
Cet article est reproduit à partir de : https://blog.csdn.net/weixin_38112233/article/details/79220535Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!