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

Detaillierte Analyse der Modellzuordnung des Laravel-Modells

WBOY
Freigeben: 2022-05-26 21:17:53
nach vorne
3158 Leute haben es durchsucht

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

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

创建一个控制器将两个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());
    }}
Nach dem Login kopieren

创建控制器的路由:
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');
    }}
Nach dem Login kopieren

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

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

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

Detaillierte Analyse der Modellzuordnung des Laravel-Modells

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

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

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

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

实例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');
    }}
Nach dem Login kopieren
Guestinfo-Modelldatei:

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

Inhalt:

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!

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