Laravel Modelモデル関連付けの詳細な分析

WBOY
リリース: 2022-05-26 21:17:53
転載
3108 人が閲覧しました

この記事では、laravel に関する関連知識を提供します。主に、1 対 1、1 対多、多対多など、モデルの関連付けに関する関連問題を紹介します。見てみましょう。皆さんのお役に立てれば幸いです。

Laravel Modelモデル関連付けの詳細な分析

[関連する推奨事項: laravel ビデオ チュートリアル ]

アソシエーション関係を定義する

データベース テーブルは通常、お互い。
たとえば、ブログ投稿に多数のコメントが含まれている場合や、注文が 1 人の注文ユーザーに対応している場合があります。 Eloquent は、これらの関連付けの管理と使用をシンプルにし、複数のタイプの関連付けをサポートします。最初の 3 つは最も一般的であり、ここでは最初の 3 つの関連付けのみを説明します

  • 1 対 1
  • 1 対多
  • #多対多
  • #リモート 1 対多
  • リモート 1 対 1
  • 1 対 1 (ポリモーフィックな関連付け)
  • 1 対多 (ポリモーフィックな関連付け)
  • 多対多
モデルの関連付けを確立する

1 対 1

例: 2 つのデータ テーブル:
guest User テーブルと guestinfo ユーザー情報 ここで、
guest テーブルの主キー id フィールドは、外部キー user_id フィールドに対応します まず、2 つのモデルを作成しますファイル: php 職人 make:model Guest

php 職人 make:model Guestinfo
ゲスト モデル ファイル: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">class Guest extends Model{     use HasFactory;     // 设置Guest模型对应的数据表     protected $table = 'guest';     // 关闭create_time和update_time字段自动管理     public $timestamps = false;     // 设置与guestinfo的关联方法,方法名建议使用被关联表的名字     public function guestinfo(){     // hasOne(被关联的名命空间,关联外键,关联的主键)         return $this-&gt;hasOne('App\Models\Guestinfo','user_id','id');     }}</pre><div class="contentsignin">ログイン後にコピー</div></div>Guestinfo モデル ファイル:

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');
    }}
ログイン後にコピー
2 つのモデル ファイルを接続するコントローラーを作成します:

php Artisan make:controller Controllers


内容: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">class Controllers extends Controller{     //     public function getOne(){     // 通过关联方法获取guest表中username = admin记录在guestinfo对应的记录     // -&gt;guestinfo 是Guest模型文件里面定义的guestinfo方法         $guestInfo = Guest::firstWhere('username','admin')-&gt;guestinfo; // 通过关联方法获取guestinfo中id=3 记录在guest表中的对应记录         $data = Guestinfo::find(3)-&gt;guest;                  dump($guestInfo);         // 将模型转换成数组         dump($data-&gt;toArray());     }}</pre><div class="contentsignin">ログイン後にコピー</div></div>## コントローラーのルートを作成します。 :
Route::get('relative/getOne',[Controllers::class,'getOne']);

アクセスルート:
結果は:


1 対多Laravel Modelモデル関連付けの詳細な分析

例:

2 つのデータ テーブル:

guest User テーブルとarticle
記事テーブル guest テーブルの主キー id
フィールドが外部キー user_id フィールド に対応します。 guestinfo で作成されました articlemodel ファイル:
php 職人 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');
    }}
ログイン後にコピー

article# を追加しますGuest モデル ファイル ## メソッド

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());
ログイン後にコピー

Laravel Modelモデル関連付けの詳細な分析

例 3: 記事の発行者の名前をクエリします。 association

		//  通过article和guest关联,再通过guest关联的guestinfo获取姓名
        $name = Article::find(2)->guest->guestinfo;
        dump($name->name);
ログイン後にコピー
例 4: アソシエーションを通じて記事のコメント情報をクエリする

コメントの作成モデル: Laravel Modelモデル関連付けの詳細な分析
php Artisan make:model Comment

コメント モデル コード:

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');
    }}
ログイン後にコピー

記事モデルにメソッド コメントを追加します: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">public function comment(){         return $this-&gt;hasMany('App\Models\April\Comment','article_id','id');     }</pre><div class="contentsignin">ログイン後にコピー</div></div>controller コントローラー コード:
$info = Article::find(2)->comment;
        foreach ($info as $v){
            dump($v->toArray());
        }
ログイン後にコピー

#[関連する推奨事項:

laravel ビデオ チュートリアル

]

以上がLaravel Modelモデル関連付けの詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート