検索
ホームページPHPフレームワークLaravelLaravel Modelモデル関連付けの詳細な分析

この記事では、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
ゲスト モデル ファイル: <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>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


内容: <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>## コントローラーのルートを作成します。 :
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');
    }}

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

#[関連する推奨事項:

laravel ビデオ チュートリアル

]

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

声明
この記事はCSDNで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
タスク管理ツール:リモートプロジェクトの進捗状況の優先順位付けと追跡タスク管理ツール:リモートプロジェクトの進捗状況の優先順位付けと追跡May 02, 2025 am 12:25 AM

Taskmanagementtoolsareessentialforeffectiveremoteprojectmanagementbyprioritizingtasksandtrackingprogress.1)UsetoolslikeTrelloandAsanatosetprioritieswithlabelsortags.2)EmploytoolslikeJiraandMonday.comforvisualtrackingwithGanttchartsandprogressbars.3)K

最新のLaravelバージョンはパフォーマンスをどのように改善しますか?最新のLaravelバージョンはパフォーマンスをどのように改善しますか?May 02, 2025 am 12:24 AM

laravel10EnhancesperformAnceTheveralkeyfeatures.1)ItintroduceSquerybuilderCachinucedatedatabaseload.2)itoptimizeseLoquentModelloadingwithlazingproxies.3)itimprovesRoutingWithineSystem.4)itemproveStingwithingingSystem.4)

フルスタックのLaravelアプリケーションの展開戦略フルスタックのLaravelアプリケーションの展開戦略May 02, 2025 am 12:22 AM

最高のフルスタックのLaravelアプリケーション展開戦略には、1。Zeroダウンタイム展開、2。ブルーグリーン展開、3。連続展開、4。Canaryリリースが含まれます。 1.ゼロダウンタイムデプロイメントは、EnvoyまたはDeployerを使用して展開プロセスを自動化して、更新時にアプリケーションを利用できるようにします。 2。ブルーとグリーンの展開により、2つの環境を維持し、迅速なロールバックを可能にすることにより、ダウンタイムの展開が可能になります。 3.継続的な展開GithubactionsまたはGitlabci/CDを使用して、展開プロセス全体を自動化します。 4。nginx構成を通じてカナリーがリリースされ、パフォーマンスの最適化と迅速なロールバックを確保するために、新しいバージョンをユーザーに徐々に宣伝します。

フルスタックのLaravelアプリケーションのスケーリング:ベストプラクティスとテクニックフルスタックのLaravelアプリケーションのスケーリング:ベストプラクティスとテクニックMay 02, 2025 am 12:22 AM

ToscalealAravelApplicationively、Focusondatabasesharding、Caching、Loadbalancing、andMicroservices.1)databaseShardingTodistributedataacrossMultipledatabase.2)uselaraval'scachingsmultedistestemedisemememememememedtededatedatab

静かな闘争:分散型チームのコミュニケーションの障壁を克服します静かな闘争:分散型チームのコミュニケーションの障壁を克服しますMay 02, 2025 am 12:20 AM

ToovercomcomcommunicationbarriersindistributedTeams、使用:1)VideoCallsForface-to-faceInteraction、2)setClearResponsetimeExpectations、3)ChooseaprateCommunicationSoools、4)CreateAmCommunicationGuide、and5)

フルスタックプロジェクトでのフロントエンドテンプレートにLaravel Bladeを使用しますフルスタックプロジェクトでのフロントエンドテンプレートにLaravel Bladeを使用しますMay 01, 2025 am 12:24 AM

laravelbladeEnhancesFrontendTemplatinginfull stackprojectsbyofferingcleansyntaxandpowerfulfeatures.1)itallows foreasyvariabledisplayandcontrolstructures.2)bladeSupportscreating andReusing components、

Laravelを使用したフルスタックアプリケーションの構築:実用的なチュートリアルLaravelを使用したフルスタックアプリケーションの構築:実用的なチュートリアルMay 01, 2025 am 12:23 AM

laravelisidealforfull-stackapplicationsduetoitseLegantyntax、包括的なセコスシステム、およびパワーフルフィーチュア

リモートロールが接続を維持するためにどのようなツールを使用しましたか?リモートロールが接続を維持するためにどのようなツールを使用しましたか?May 01, 2025 am 12:21 AM

forRemotework、iusezoomforvideocalls、slackformessaging、trelloforprojectmanagement、andgithubforcodecollaboration.1)zoomisReliaible forlargemeetingsbuthefreeversion.2)slackintegrateswellwithtoolSotoolsotification -ortificationoverload.3)trel

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン