この記事では、laravel に関する関連知識を提供します。主に、1 対 1、1 対多、多対多など、モデルの関連付けに関する関連問題を紹介します。見てみましょう。皆さんのお役に立てれば幸いです。
[関連する推奨事項: laravel ビデオ チュートリアル ]
データベース テーブルは通常、お互い。
たとえば、ブログ投稿に多数のコメントが含まれている場合や、注文が 1 人の注文ユーザーに対応している場合があります。 Eloquent は、これらの関連付けの管理と使用をシンプルにし、複数のタイプの関連付けをサポートします。最初の 3 つは最も一般的であり、ここでは最初の 3 つの関連付けのみを説明します
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->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'); }}
内容: <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对应的记录
// ->guestinfo 是Guest模型文件里面定义的guestinfo方法
$guestInfo = Guest::firstWhere('username','admin')->guestinfo;
// 通过关联方法获取guestinfo中id=3 记录在guest表中的对应记录
$data = Guestinfo::find(3)->guest;
dump($guestInfo);
// 将模型转换成数组
dump($data->toArray());
}}</pre><div class="contentsignin">ログイン後にコピー</div></div>## コントローラーのルートを作成します。 :
Route::get('relative/getOne',[Controllers::class,'getOne']);
アクセスルート:
結果は:
1 対多
例:
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());
// 通过article和guest关联,再通过guest关联的guestinfo获取姓名 $name = Article::find(2)->guest->guestinfo; dump($name->name);
コメントの作成モデル:
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->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 サイトの他の関連記事を参照してください。