Maison  >  Article  >  cadre php  >  Analyse détaillée de l'association du modèle Laravel Model

Analyse détaillée de l'association du modèle Laravel Model

WBOY
WBOYavant
2022-05-26 11:47:122984parcourir

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.

Analyse détaillée de l'association du modèle Laravel Model

【Recommandation associée : Tutoriel vidéo Laravel

Définir les relations d'association

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

  • One-to-one
  • One-to- many
  • Plusieurs-à-plusieurs
  • Un-à-plusieurs à distance
  • Un-à-un à distance
  • Un-à-un (association polymorphe)
  • Un-à-plusieurs (association polymorphe)
  • Many- to-many

Établir une association de modèle

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']);
访问路由:
结果为:
Analyse détaillée de lassociation du modèle Laravel Model

一对多

示例:
两个数据表: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());
        }

Analyse détaillée de lassociation du modèle Laravel Model

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

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

Analyse détaillée de lassociation du modèle Laravel Model
实例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

Fichier modèle invité :

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');
    }}
Fichier modèle Guestinfo :

public function comment(){
        return $this->hasMany('App\Models\April\Comment','article_id','id');
    }
Analyse détaillée de lassociation du modèle Laravel ModelCréez un contrôleur pour connecter les deux fichiers de modèle : php artisan make:controller Controllers

Contenu :

$info = Article::find(2)->comment;
        foreach ($info as $v){
            dump($v->toArray());
        }
Créez une route de contrôleur :

Route::get('relative/getOne' ,[Controllers::class,'getOne']); code>🎜 Itinéraire d'accès : 🎜 Le résultat est : 🎜Insérer la description de l'image ici 🎜🎜🎜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 articlemodel 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🎜Insérer la description de l'image ici🎜🎜Exemple 2 : Interroger le dernier article publié par un utilisateur 🎜rrreee🎜Insérer la description de l'image ici🎜 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer