您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
数据库之Eloquent ORM
发布时间:2019-09-22 21:54:07编辑:雪饮阅读()
一对一关联模型
模型a声明如:
class Test extends Model
{
public $table='users';
public $primaryKey='id';
public $timestamps=false;
public function userinfo(){
//用户信息模型所在类的命名空间路径、用户信息模型中的用户id字段、本模型中的用户id字段
return $this->hasOne('\App\Userinfo','userid','id');
}
}
模型b声明如:
class Userinfo extends Model
{
public $table='userinfo';
public $primaryKey='id';
public $timestamps=false;
}
则控制器中使用一对一关联如:
$user=\App\Test::find(1);
//读取方式-方法
$userinfo=$user->userinfo()->first();
//读取方式-属性
$userinfo=$user->userinfo;
var_dump($userinfo['wife']);
一对多关联模型
用户表模型如:
class Test extends Model
{
public $table='users';
public $primaryKey='id';
public $timestamps=false;
public function post(){
//文章模型命名空间路径,文章表中的用户id字段
return $this->hasMany('\App\Post','userid');
}
}
文章表模型如:
class Post extends Model
{
public $table='posts';
}
则控制器中一对多关联模型的使用如:
$user=\App\Test::find(1);
$post=$user->post()->where('id',1)->get();
echo $post[0]['title'];
一对多写入
在上面一对多关联模型的基础上,控制器可以实现一对多写入,如:
$post=new \App\Post;
$post->title='每当思念将岁月磨穿';
$post->content='我可以枪林弹雨泰然任无数,也可以挥刀见血眉不蹙';
$user=\App\Test::find(1);
$user->post()->save($post);
属于关系
用户模型如:
class Test extends Model
{
public $table='users';
public $primaryKey='id';
public $timestamps=false;
public function country(){
//用户所在国家模型命名空间路径,用户模型的国家id字段
return $this->belongsTo('\App\Country','countryid');
}
}
国家模型如:
class Country extends Model
{
public $table='country';
}
则控制器中调用属于关系如:
$user=\App\Test::find(1);
//读取方式-方法
$country=$user->country()->first();
//读取方式-属性
$country=$user->country;
echo $country['name'];
多对多关联模型
用户模型声明如:
class Test extends Model
{
public $table='users';
public $primaryKey='id';
public $timestamps=false;
public function group(){
//用户组模型(不包含用户id,仅组名和组id)
//用户模型和组模型共同关联的表(这里是表名不是模型)
//共同关联表中的用户id
//共同关联表中的用户组id
return $this->belongsToMany('\App\Group','usergroup','userid','groupid');
}
}
组模型声明如:
class Group extends Model
{
public $table='group';
}
控制器调用如:
$user=\App\Test::find(1);
//当前用户的所参加的组列表
$user_group=$user->group()->get();
dd($user_group);
多对多关联模型应用
加入组
操作方式1:
$user=\App\Test::find(1);
//用户加入2组
$user->group()->attach(2);
操作方式2:
$group=new \App\Group;
$group=$group::find(3);
$user=\App\Test::find(1);
//用户加入3组
$user->group()->attach($group);
退出组
用户1退出3组
$group=new \App\Group;
$group=$group::find(3);
$user=\App\Test::find(1);
$user->group()->detach($group);
某用户的组同步
同步用户id为1的组列表,让其仅有2组合4组,若已存在关联则不处理,若不存在关联则创建关联
$user=\App\Test::find(1);
$user->group()->sync([2,4]);
laravel自带user模型的fillable属性对数据填充的影响
laravel自带的user模型中fillable属性这样定义:
protected $fillable = ['name', 'email', 'password'];
则控制器中有调用如:
$user=\App\User::create(['name'=>'abc','groupid'=>3]);
echo $user['groupid'];
echo '<br/>';
echo $user['name'];
这里groupid不会被创建成功,因为其不在fillable可允许填充的字段列表中
laravel自带user模型的hidden属性对数据读取的影响
laravel自带的user模型中hidden属性这样定义:
protected $hidden = ['password', 'remember_token'];
则控制器中有调用如:
$user=\App\User::get();
var_dump($user[0]->toArray());
这里读取的数据里面无法看到password字段,因为该字段存在于hidden属性值列表中。
关键字词:laravel,数据库,eloquent,orm,关联模型
上一篇:数据库之填充
下一篇:微擎非安装版模块的手动安装