Heim > PHP-Framework > Laravel > Hauptteil

Laravel-Einführungs-Tutorial: Die Beziehung zwischen Tabellen

爱喝马黛茶的安东尼
Freigeben: 2019-11-20 16:51:48
nach vorne
2383 Leute haben es durchsucht

Laravel-Einführungs-Tutorial: Die Beziehung zwischen Tabellen

Zunächst einmal über die Beziehung zwischen Tabellen

1. Eins-zu-eins

2. Eins-zu-viele

3 . Viele-zu-viele

Unterscheiden Sie zwischen übergeordneter Tabelle und untergeordneter Tabelle1. „Eins“ ist die übergeordnete Tabelle

2. „Many“ Es handelt sich um eine untergeordnete Tabelle

Wie man mit einer Eins-zu-viele-Beziehung umgehtErstellen Sie ein Feld ( Fremdschlüssel) in der untergeordneten Tabelle, um auf die übergeordnete Tabelle zu verweisen

So gehen Sie mit Viele-zu-Viele-Beziehungen umErstellen Sie ein Zwischenprodukt Tabelle zum Konvertieren von „viele-zu-viele“-Beziehungen in „eins-zu-viele“-Beziehungen

FallanalyseTabelle 1: Benutzertabelle (it_user)

Tabelle 2: Tabelle mit Benutzerdetails (it_user_info)

Tabelle 3: Artikeltabelle (it_article)

Tabelle 4: Ländertabelle (it_country)

Tabelle 5: Benutzerrollentabelle (it_role)

① Eins-zu-eins

Die Benutzertabelle (Tabelle 1) und die Detailtabelle (Tabelle 2) haben eine Eins-zu- eine Beziehung

②Eins-zu-viele

Die Benutzertabelle (Tabelle 1) und die Artikeltabelle (Tabelle 3) sind eine Eins-zu-viele-Beziehung

③Many- zu eins

Die Benutzertabelle (Tabelle 1) und die Ländertabelle (Tabelle 4) sind eine Viele-zu-Eins-Beziehung

④Many-to-many

Die Benutzertabelle (Tabelle 1) und Rollentabelle (Tabelle 5) sind die Viele-zu-Viele-Beziehung

Benutzertabellenerstellung und Testdaten

DROP 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');
Nach dem Login kopieren

Tabellenerstellung für Benutzerdetails und Testdaten

-- ----------------------------
-- 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', '武汉');
Nach dem Login kopieren

Erstellung von Artikeltabellen und Testdaten

-- ----------------------------
-- 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');
Nach dem Login kopieren

Erstellung von Ländertabellen und Testdaten

-- ----------------------------
-- 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', '美国');
Nach dem Login kopieren

Benutzerrollentabellenerstellung und Testdaten

-- ----------------------------
-- 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', '管理');
Nach dem Login kopieren

Benutzer- und Rollenzwischentabellenerstellung und Testdaten

-- ----------------------------
-- 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');
Nach dem Login kopieren

Vorbereitungsarbeiten

1. Routen planen

in Routen/ Schreiben Sie die folgende Route unter web.php:

//ORM的关联关系
Route::get('/orm/relation/{mode}','ORM\UserController@relation');
Nach dem Login kopieren

2. Schreiben Sie die Beziehungsmethode in 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;
        }
    }
Nach dem Login kopieren

3. Installieren Sie das Debugging-Tool

3.1 Verwenden Sie den Composer-Befehl, um

composer require  barryvdh/laravel-debugbar
Nach dem Login kopieren

3.2 zu installieren. Ändern Sie die Datei config/app.php, laden Sie debugbar in Laravel in das Projekt und fügen Sie sie dem Array „providers“ hinzu. Die folgende Konfiguration:

Barryvdh\Debugbar\ServiceProvider::class,
Nach dem Login kopieren

Zusätzlich zur Installation des Debugbar-Debugging-Tools können Sie auch die Abfrageüberwachung verwenden: Fügen Sie den folgenden Code zur Boot-Methode von Providers/AppServiceProvider.php hinzu

\DB::listen(function ($query) {
    var_dump($query->sql);
     var_dump($query->bindings);
     echo &#39;<br>&#39;;
 });
Nach dem Login kopieren

Sie können die ausgeführte SQL auch ausdrucken Stellungnahme.

Eins-zu-eins

1 Erstellen Sie das Userinfo-Modellobjekt

Geben Sie das ein cmd-Befehlszeile. Wenn Sie den folgenden Befehl in dem Verzeichnis ausführen, in dem sich das Laravel-Projekt befindet:

php artisan make:model Userinfo
Nach dem Login kopieren

, wird Userinfo.php im App-Verzeichnis generiert

2. Bearbeiten Sie die Userinfo-Modelldatei

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Userinfo extends Model
{
    protected $table  =  &#39;user_info&#39;;
    protected $primaryKey = &#39;user_id&#39;;
    protected $fillable = [&#39;user_id&#39;,&#39;tel&#39;,&#39;email&#39;,&#39;addr&#39;];
    public    $timestamps = false;
}
Nach dem Login kopieren

3. Schreiben Sie UserModel und fügen Sie eine Eins-zu-Eins-Methode hinzu

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class UserModel extends Model
{
    protected $table = &#39;user&#39;;//真是表名
    protected $primaryKey = &#39;id&#39;;//主键字段,默认为id
    protected $fillable = [&#39;name&#39;,&#39;password&#39;];//可以操作的字段
    public $timestamps = false;//如果数据表中没有created_at和updated_id字段,则$timestamps则可以不设置,
    默认为true
    public function Userinfo()
    {
        /*
         * @param [string] [name] [需要关联的模型类名]
         * @param [string] [foreign] [参数一指定数据表中的字段]
         * */
        return $this->hasOne(&#39;App\Userinfo&#39;,&#39;user_id&#39;);
    }
Nach dem Login kopieren

4 🎜>

    public function relation($mode)
    {
        switch ($mode){
            case &#39;1_1&#39;:
            {
                //一对一
                $data = UserModel::find(1)->Userinfo()->get();
                dd($data);
            }
            break;
            default;
        }
    }
Nach dem Login kopieren

Eins-zu-viele

1. Erstellen Sie das Artikelmodellobjekt

Führen Sie den Befehl

php artisan make:model Article
Nach dem Login kopieren

aus, um die Article.php-Datei unter der App zu generieren

2. Schreiben Sie die Artikelmodelldatei

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Article extends Model
{
    protected $table = &#39;article&#39;;
    protected $primaryKey = &#39;id&#39;;
    protected $fillable = [&#39;id&#39;,&#39;title&#39;,&#39;content&#39;,&#39;user_id&#39;];
    public $timestamps  = false;
}
Nach dem Login kopieren
3 . Schreiben Sie UserModel und fügen Sie die Eins-zu-viele-Methode

public function Artice()
    {
        return $this->hasMany(&#39;App\Article&#39;,&#39;User_id&#39;);
    }
Nach dem Login kopieren
4 hinzu. Schreiben Sie den UserController und rufen Sie die Eins-zu-viele-Methode

    public function relation($mode)
    {
        switch ($mode){
            case &#39;1_1&#39;:
            {
                //一对一
                $data = UserModel::find(1)->Userinfo()->get();
                dd($data);
            }
            break;
            case &#39;1_n&#39;:
            {
                //一对多
                $data = UserModel::find(1)->Artice()->get();
                dd($data);
            }
                break;
            default;
        }
    }
}
Nach dem Login kopieren
<🎜 auf >viele-zu-eins

1. Erstellen Sie das Ländermodellobjekt

führt den Befehl

php artisan make:model Country
Nach dem Login kopieren
aus

2. Ländermodelldatei schreiben

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Country extends Model
{
    protected $table = &#39;country&#39;;   //真实表名
    protected $primaryKey = "id";   //主键id
    protected $fillable = [&#39;id&#39;,&#39;name&#39;];    //允许操作的字段
    public $timestamps = false; //如果数据表中没有created_at和updated_id字段,则$timestamps则可以不设置,
    默认为true
}
Nach dem Login kopieren

3. UserModel schreiben und Viele-zu-Eins-Methode hinzufügen

public function Country()
{
    return $this->belongsTo(&#39;App\Country&#39;,&#39;country_id&#39;);
}
Nach dem Login kopieren

4 UserController und Aufrufmethode

public function relation($mode)
    {
        switch ($mode){
            case &#39;1_1&#39;:
            {
                //一对一
                $data = UserModel::find(1)->Userinfo()->get();
                dd($data);
            }
            break;
            case &#39;1_n&#39;:
            {
                //一对多
                $data = UserModel::find(1)->Artice()->get();
                dd($data);
            }
                break;
            case &#39;n_1&#39;:
            {
                //多对一
                $data = UserModel::find(1)->Country()->get();
                dd($data);
            }
                break;
            default;
        }
    }
}
Nach dem Login kopieren

Many-to-Many

1. Rollenmodellobjekt erstellen

Befehl ausführen

php artisan make:model Role
Nach dem Login kopieren
Befehl ausführen

php artisan make:model User_role
Nach dem Login kopieren

2. Rollenmodell schreiben

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
    protected $table = &#39;role&#39;;
    protected $primaryKey = "id";
    protected $fillable = [&#39;name&#39;];
    public $timestamps  =false;
}
Nach dem Login kopieren

Benutzer_Rollenmodell schreibenDa es in der Tabelle kein Primärschlüsselfeld gibt, werden zwei Felder benötigt

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User_role extends Model
{
    protected $table = &#39;user_role&#39;;
    public $timestamps  =false;
}
Nach dem Login kopieren

3. Schreiben Sie das UserModel und fügen Sie die Viele-zu-viele-Methode hinzu

    public function Role(){
        /*
         * 第一个参数:要关联的表对应的类
         * 第二个参数:中间表的表名
         * 第三个参数:当前表跟中间表对应的外键
         * 第四个参数:要关联的表跟中间表对应的外键
         * */
        return $this->belongsToMany(&#39;App\Role&#39;,&#39;user_role&#39;,&#39;user_id&#39;,&#39;role_id&#39;);
    }
Nach dem Login kopieren

4. Schreiben Sie UserController und rufen Sie die Many-to-Many-Methode auf

public function relation($mode)
{
    switch ($mode){
        case &#39;1_1&#39;:
        {
            //一对一
            $data = UserModel::find(1)->Userinfo()->get();
            dd($data);
        }
        break;
        case &#39;1_n&#39;:
        {
            //一对多
            $data = UserModel::find(1)->Artice()->get();
            dd($data);
        }
            break;
        case &#39;n_1&#39;:
        {
            //多对一
            $data = UserModel::find(1)->Country()->get();
            dd($data);
        }
            break;
        case &#39;n_n&#39;:
        {
            //多对多
           $data = UserModel::find(2)->Role()->get();
           dd($data);
        }
            break;
        default;
    }
}
Nach dem Login kopieren

Zusammenfassung:

1. So verwenden Sie eins: hasOne ()2. So verwenden Sie eins-zu-viele: hasMany()

3. So verwenden Sie viele-zu-eins: gehörtzu()

4. Viele So verwenden Sie viele: gehörtToMany()

PHP-chinesische Website, eine große Anzahl kostenloser

Laravel-Einführungs-Tutorials

, willkommen zum Online-Lernen!

Dieser Artikel wurde reproduziert von: https://blog.csdn.net/weixin_38112233/article/details/79220535

Das obige ist der detaillierte Inhalt vonLaravel-Einführungs-Tutorial: Die Beziehung zwischen Tabellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage