Heim  >  Artikel  >  PHP-Framework  >  Detaillierte Analyse der Modellzuordnung des Laravel-Modells

Detaillierte Analyse der Modellzuordnung des Laravel-Modells

WBOY
WBOYnach vorne
2022-05-26 11:47:123090Durchsuche

Dieser Artikel vermittelt Ihnen relevantes Wissen über laravel, in dem hauptsächlich verwandte Themen zur Modellmodellzuordnung vorgestellt werden, einschließlich Eins-zu-Eins, Eins-zu-Viele, Viele-zu-Viele usw. Werfen wir einen Blick darauf, ich hoffe es hilft allen.

Detaillierte Analyse der Modellzuordnung des Laravel-Modells

【Verwandte Empfehlung: Laravel-Video-Tutorial

Definieren Sie Assoziationsbeziehungen

Datenbanktabellen stehen normalerweise in Beziehung zueinander.
Ein Blog-Beitrag kann beispielsweise viele Kommentare enthalten oder eine Bestellung kann einem bestellenden Benutzer entsprechen. Eloquent vereinfacht die Verwaltung und Verwendung dieser Assoziationen und unterstützt mehrere Arten von Assoziationen: Die ersten drei sind die häufigsten, und hier erklären wir nur die ersten drei Assoziationen

  • Eins-zu-eins
  • Eins-zu- viele
  • Viele-zu-viele
  • Remote eins-zu-viele
  • Remote eins-zu-eins
  • Eins-zu-eins (polymorphe Assoziation)
  • Eins-zu-viele (polymorphe Assoziation)
  • Many- zu-viele

Modellzuordnung herstellen

Eins Eins-zu-eins

Beispiel:
Zwei Datentabellen: guest Benutzertabelle und guestinfo Benutzer Informationen guest 用户表和guestinfo用户信息
其中guest表中的主键id字段对应着guestinfo中的外键user_id字段
首先创建两个model文件:
php artisan make:model Guest
php artisan make:model Guestinfo
Guest model文件:

class Guest extends Model{
    use HasFactory;
    // 设置Guest模型对应的数据表
    protected $table = 'guest';
    // 关闭create_time和update_time字段自动管理
    public $timestamps = false;
    // 设置与guestinfo的关联方法,方法名建议使用被关联表的名字
    public function guestinfo(){
    // hasOne(被关联的名命空间,关联外键,关联的主键)
        return $this->hasOne('App\Models\Guestinfo','user_id','id');
    }}

Guestinfo model文件:

class Guestinfo extends Model{
    use HasFactory;
    // 设置Guest模型对应的数据表
    protected $table = 'guestinfo';
    // 关闭create_time和update_time字段自动管理
    public $timestamps = false;
    // 设置与guestinfo的关联方法,方法名建议使用被关联表的名字
    public function guest(){
    // hasOne(被关联的名命空间,关联外键,关联的主键)
        return $this->belongsTo('App\Models\Guest','user_id','id');
    }}

创建一个控制器将两个model文件连接起来:
php artisan make:controller Controllers
内容:

class Controllers extends Controller{
    //
    public function getOne(){
    // 通过关联方法获取guest表中username = admin记录在guestinfo对应的记录
    // ->guestinfo 是Guest模型文件里面定义的guestinfo方法
        $guestInfo = Guest::firstWhere('username','admin')->guestinfo;
	// 通过关联方法获取guestinfo中id=3 记录在guest表中的对应记录
        $data = Guestinfo::find(3)->guest;
        
        dump($guestInfo);
        // 将模型转换成数组
        dump($data->toArray());
    }}

创建控制器的路由:
Route::get('relative/getOne',[Controllers::class,'getOne']);
访问路由:
结果为:
Detaillierte Analyse der Modellzuordnung des Laravel-Modells

一对多

示例:
两个数据表:guest 用户表和article文章表
其中guest表中的主键id字段对应着guestinfo中的外键user_id字段
创建articlemodel文件:
php artisan make:model Article

class Article extends Model{
    use HasFactory;
    // 设置Guest模型对应的数据表
    protected $table = 'article';
	// 关闭create_time和update_time字段自动管理    
    public $timestamps = false;
    public function guest(){
    // 设置与guest的关联方法,与一对一的从表设置一样
        return $this->belongsTo('App\Models\April\Guest','user_id','id');
    }}

Guest model文件中添加一个article 方法

class Guest extends Model{
    use HasFactory;
    // 设置Guest模型对应的数据表
    protected $table = 'guest';
    // 关闭create_time和update_time字段自动管理
    public $timestamps = false;
    // 设置与guestinfo的关联方法,方法名建议使用被关联表的名字
    public function guestinfo(){
    // hasOne(被关联的名命空间,关联外键,关联的主键)
        return $this->hasOne('App\Models\Guestinfo','user_id','id');
    }
    // 设置与article的关联:hasmany 有很多
     public function article(){
        return $this->hasMany('App\Models\April\Article','user_id','id');
    }}

Controllers 控制器文件中测试一下:
实例1:查询某一个用户发表的所有文章:

 		// 查询某个用户发表的所有文章
        $article = Guest::find(1)->article;
        // 返回为数据集,需要遍历
        foreach ($article as $v){
            dump($v->toArray());
        }

Detaillierte Analyse der Modellzuordnung des Laravel-Modells

实例2:查询某个用户最新发表的一篇文章

		// 查询某个用户最新发表的一篇文章
        // article()生成一个构造器,可以进行筛选
        $article = Guest::find(1)->article()->orderby('created_at','desc')->first();
        dump($article->toArray());

Detaillierte Analyse der Modellzuordnung des Laravel-Modells
实例3:通过关联查询某篇文章的发表人的姓名

		//  通过article和guest关联,再通过guest关联的guestinfo获取姓名
        $name = Article::find(2)->guest->guestinfo;
        dump($name->name);

实例4:通过关联查询某篇文章的评论信息
创建Comment评论模型:
php artisan make:model Comment Darunter der Primärschlüssel in der Tabelle guest. Das Feld id entspricht dem Fremdschlüsselfeld user_id in guestinfo code><br> Erstellen Sie zunächst zwei Modelldateien:

php artisan make:model Guest

php artisan make:model Guestinfo

Guest-Modelldatei:

class Comment extends Model{
    use HasFactory;
    // 设置Comment模型对应的数据表
    protected $table = 'comment';
    // 关闭create_time和update_time字段自动管理
    public $timestamps = false;
    // 设置与article的关联方法,方法名建议使用被关联表的名字
    public function article(){
        return $this->belongsTo('App\Models\April\Article','article_id','id');
    }}
Guestinfo-Modelldatei:

public function comment(){
        return $this->hasMany('App\Models\April\Comment','article_id','id');
    }
Detaillierte Analyse der Modellzuordnung des Laravel-ModellsErstellen Sie einen Controller, um die beiden Modelldateien zu verbinden: php artisan make:controller Controllers

Inhalt:

$info = Article::find(2)->comment;
        foreach ($info as $v){
            dump($v->toArray());
        }
Erstellen Sie eine Controller-Route:

Route::get('relative/getOne' ,[Controllers::class,'getOne']); code>🎜 Zugriffsroute: 🎜 Das Ergebnis ist: 🎜Bildbeschreibung hier einfügen 🎜🎜🎜One-to-many🎜🎜🎜🎜 Beispiel: 🎜🎜 Zwei Datentabellen: guest user table und article Artikeltabelle 🎜 wobei guestDas Primärschlüsselfeld id in der Tabelle dem Fremdschlüsselfeld user_id entspricht in guestinfo 🎜 Erstellen Sie eine articlemodel-Datei: 🎜php artisan make:model Article🎜rrreee🎜Fügen Sie eine article-Methode hinzu in der Guest-Modelldatei🎜rrreee🎜in Controllern Testen Sie es in der Controller-Datei: 🎜 Beispiel 1: Alle von einem Benutzer veröffentlichten Artikel abfragen: 🎜rrreee🎜Bildbeschreibung hier einfügen🎜🎜Beispiel 2: Fragen Sie den neuesten von einem Benutzer veröffentlichten Artikel ab 🎜rrreee🎜Bildbeschreibung hier einfügen🎜 Beispiel 3: Fragen Sie ab Name des Herausgebers eines Artikels durch Assoziation🎜rrreee🎜Beispiel 4: Abfrage der Kommentarinformationen eines Artikels durch Assoziation 🎜 Erstellen Sie ein Kommentarmodell: 🎜php artisan make:model Comment🎜 Kommentarmodellcode: 🎜 rrreee🎜Methodenkommentar im Artikelmodell hinzufügen: 🎜rrreee🎜Controller-Steuerung Gerätecode: 🎜rrreee🎜🎜🎜🎜[Verwandte Empfehlungen: 🎜Laravel-Video-Tutorial🎜]🎜

Das obige ist der detaillierte Inhalt vonDetaillierte Analyse der Modellzuordnung des Laravel-Modells. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen