本篇文章為大家帶來了關於laravel的相關知識,其中主要介紹了關於Model模型關聯的相關問題,包括了一對一、一對多、多對多等內容,下面一起來看一下,希望對大家有幫助。
【相關推薦:laravel影片教學】
資料庫表通常會相互關聯。
例如,一篇部落格文章可能有許多評論,或一個訂單對應一個下單用戶。 Eloquent 讓這些關聯的管理和使用變得簡單,並支援多種類型的關聯:常見的為前三種,在此我們也只講解前三種關聯
一對一
範例: 兩個資料表:
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'); }}
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']); 存取路由:
結果為:
範例:
兩個資料表:guest
使用者表和article
文章表 其中
guest
表中的主鍵id
欄位對應著guestinfo
中的外鍵user_id
欄位 創建
article
model檔:php artisan make:model Article
<pre class="brush:php;toolbar:false">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');
}}</pre>
在
model檔案中加入一個article
方法<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');
}
// 设置与article的关联:hasmany 有很多
public function article(){
return $this->hasMany('App\Models\April\Article','user_id','id');
}}</pre>
在
控制器檔案中測試一下: 實例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());
# 實例3:透過關聯查詢某篇文章的發表人的姓名
// 通过article和guest关联,再通过guest关联的guestinfo获取姓名 $name = Article::find(2)->guest->guestinfo; dump($name->name);
#php artisan make:model Comment 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'); }}
public function comment(){ return $this->hasMany('App\Models\April\Comment','article_id','id'); }
controller控制器程式碼:
$info = Article::find(2)->comment; foreach ($info as $v){ dump($v->toArray()); }
【相關推薦:
laravel影片教學以上是詳細解析Laravel Model模型關聯的詳細內容。更多資訊請關注PHP中文網其他相關文章!