>  기사  >  PHP 프레임워크  >  Laravel 모델 모델 연관성에 대한 상세 분석

Laravel 모델 모델 연관성에 대한 상세 분석

WBOY
WBOY앞으로
2022-05-26 11:47:123096검색

이 글은 일대일, 일대다, 다대다 등을 포함하여 모델 모델 연관과 관련된 문제를 주로 소개하는 laravel에 대한 관련 지식을 제공합니다. 모두를 돕습니다.

Laravel 모델 모델 연관성에 대한 상세 분석

【관련 추천: laravel 동영상 튜토리얼

연관 관계 정의

데이터베이스 테이블은 일반적으로 서로 관련되어 있습니다.
예를 들어, 블로그 게시물에 댓글이 많을 수도 있고, 주문이 한 명의 주문 사용자에게 해당될 수도 있습니다. Eloquent는 이러한 연결의 관리 및 사용을 간단하게 만들고 다양한 유형의 연결을 지원합니다. 처음 세 개가 가장 일반적인 연결이고 여기서는 처음 세 개의 연결만 설명합니다

  • One-to-one
  • One-to- 다
  • 다대다
  • 원격 일대다
  • 원격 일대일
  • 일대일(다형성 연관)
  • 일대다(다형성 연관)
  • 다- to-many

모델 연관 설정

일대일

예:
두 개의 데이터 테이블: guest 사용자 테이블 및 guestinfo 사용자 information 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']);
访问路由:
结果为:
Laravel 모델 모델 연관성에 대한 상세 분석

一对多

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

Laravel 모델 모델 연관성에 대한 상세 분석

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

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

Laravel 모델 모델 연관성에 대한 상세 분석
实例3:通过关联查询某篇文章的发表人的姓名

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

实例4:通过关联查询某篇文章的评论信息
创建Comment评论模型:
php artisan make:model Comment 그 중 guest 테이블의 기본 키 id 필드는 guestinfo의 외래 키 <code>user_id 필드에 해당합니다. code>
먼저 두 개의 모델 파일을 만듭니다:

php artisan make:model Guest

php artisan make:model Guestinfo

Guest 모델 파일:

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 모델 파일:

public function comment(){
        return $this->hasMany('App\Models\April\Comment','article_id','id');
    }
Laravel 모델 모델 연관성에 대한 상세 분석두 모델 파일을 연결하기 위한 컨트롤러 생성:php artisan make:controller Controllers

콘텐츠:

$info = Article::find(2)->comment;
        foreach ($info as $v){
            dump($v->toArray());
        }
컨트롤러 경로 생성:

Route::get('relative/getOne' ,[Controllers::class,'getOne']); code>🎜 액세스 경로: 🎜 결과는 다음과 같습니다: 🎜여기에 이미지 설명 삽입 🎜🎜🎜일대다🎜🎜🎜🎜 예: 🎜🎜 두 개의 데이터 테이블: guest 사용자 테이블 및 article 기사 테이블 🎜 여기서 guest테이블의 기본 키 id 필드는 외래 키 user_id 필드에 해당합니다. guestinfo에서 🎜 articlemodel 파일 생성: 🎜php artisan make:model Article🎜rrreee🎜 article 메소드 추가 Guest 모델 파일🎜rrreee🎜in Controllers 컨트롤러 파일에서 테스트: 🎜 예 1: 사용자가 게시한 모든 기사 쿼리: 🎜rrreee🎜여기에 이미지 설명 삽입🎜🎜예 2: 사용자가 게시한 최신 기사 쿼리 🎜rrreee🎜여기에 그림 설명 삽입🎜 예 3: 쿼리 연결을 통한 기사 게시자 이름🎜rrreee🎜예 4: 연결을 통해 기사의 댓글 정보 쿼리 🎜 댓글 모델 만들기: 🎜php artisan make:model 댓글🎜 댓글 모델 코드: 🎜 rrreee🎜기사 모델에 메서드 설명 추가: 🎜rrreee🎜controller control 장치 코드: 🎜rrreee🎜🎜🎜🎜[관련 권장 사항: 🎜laravel 비디오 튜토리얼🎜]🎜

위 내용은 Laravel 모델 모델 연관성에 대한 상세 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제