Cet article vous apporte des connaissances pertinentes sur laravel, qui présente principalement des problèmes liés à l'association de modèles modèles, notamment un à un, un à plusieurs, plusieurs à plusieurs, etc. Jetons un coup d'œil, espérons-le aide tout le monde.
【Recommandation associée : Tutoriel vidéo Laravel】
Les tables de base de données sont généralement liées les unes aux autres.
Par exemple, un article de blog peut contenir de nombreux commentaires, ou une commande peut correspondre à un seul utilisateur commandant. Eloquent simplifie la gestion et l'utilisation de ces associations, et prend en charge plusieurs types d'associations : les trois premières sont les plus courantes, et nous expliquons ici uniquement les trois premières associations
Un Un-à-un
Exemple :
Deux tables de données : table utilisateur guest
et utilisateur guestinfo
informations 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
Parmi eux, la clé primaire dans la table guest
. Le champ id
correspond au champ de clé étrangère user_id
dans guestinfo code><br> Créez d'abord deux fichiers modèles :
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'); }}
public function comment(){ return $this->hasMany('App\Models\April\Comment','article_id','id'); }
php artisan make:controller Controllers
Contenu : $info = Article::find(2)->comment;
foreach ($info as $v){
dump($v->toArray());
}
Route::get('relative/getOne' ,[Controllers::class,'getOne']);
code>🎜 Itinéraire d'accès : 🎜 Le résultat est : 🎜🎜🎜🎜Un à plusieurs🎜🎜🎜🎜 Exemple : 🎜🎜 Deux tables de données : table utilisateur invité
et article
table d'articles 🎜 où guestLe champ <code>id
de clé primaire dans la table correspond au champ de clé étrangère user_id
dans guestinfo
🎜 Créer un article
model File : 🎜php artisan make:model Article
🎜rrreee🎜Ajouter une méthode article
dans le fichier modèle Invité
🎜rrreee🎜dans Contrôleurs
Testez-le dans le fichier contrôleur : 🎜 Exemple 1 : Interroger tous les articles publiés par un utilisateur : 🎜rrreee🎜🎜🎜Exemple 2 : Interroger le dernier article publié par un utilisateur 🎜rrreee🎜🎜 Exemple 3 : interroger le nom de l'éditeur d'un article via association🎜rrreee🎜Exemple 4 : Interroger les informations de commentaire d'un article via association 🎜 Créer un modèle de commentaire : 🎜php artisan make:model Comment
🎜 Code du modèle de commentaire : 🎜 rrreee🎜Ajouter un commentaire de méthode dans le modèle d'article : 🎜rrreee🎜contrôle du contrôleur Code de l'appareil : 🎜rrreee🎜🎜🎜🎜[Recommandations associées : 🎜tutoriel vidéo laravel🎜]🎜Ce 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!