Heim > Artikel > PHP-Framework > Detaillierte Analyse der Modellzuordnung des Laravel-Modells
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.
【Verwandte Empfehlung: Laravel-Video-Tutorial】
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 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']);
访问路由:
结果为:
一对多
示例:
两个数据表:guest
用户表和article
文章表
其中guest
表中的主键id
字段对应着guestinfo
中的外键user_id
字段
创建article
model文件: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()); }
实例2:查询某个用户最新发表的一篇文章
// 查询某个用户最新发表的一篇文章 // article()生成一个构造器,可以进行筛选 $article = Guest::find(1)->article()->orderby('created_at','desc')->first(); dump($article->toArray());
实例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
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'); }Erstellen 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: 🎜🎜🎜🎜One-to-many🎜🎜🎜🎜 Beispiel: 🎜🎜 Zwei Datentabellen: guest
user table und article
Artikeltabelle 🎜 wobei guest
Das Primärschlüsselfeld id
in der Tabelle dem Fremdschlüsselfeld user_id
entspricht in guestinfo
🎜 Erstellen Sie eine article
model-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🎜🎜🎜Beispiel 2: Fragen Sie den neuesten von einem Benutzer veröffentlichten Artikel ab 🎜rrreee🎜🎜 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!