模型类一些私有属性
1 | //指定表名 |
数据库一些用法
1 | App\Flight::updateOrCreate(['name'=>'Flight 10'],['airline'=>'888']); |
如果有就更新第一条搜索到的数据 第一个参数搜索条件 第二个参数更新内容 如果没有就创建
这个方法和firstOrNew还有firstOrCreate 是一样的这不过这两个只有一个参数 他们用法其实不太很有用查到后只会更新下时间 并没有其他用,如果参数为数组为多元,那么只是加了搜索条件而已搜出来的 还是新的,所以还会接着创建.还有一点Create还得必须修改模型fillable或者$guarded 而New还得用save存一下不能直接插入数据库
1 | DB::table('users') |
select * from users where exists (select 1 from orders where orders.user_id = users.id)
生成上面那句语句 exists 判断括号内语句是否为真 为真则搜索 为假则放弃
表关联
还有个问题就是在函数命名上,也是有规矩的 单数用单数 复数用复数 下面就是例子
1 | public function account(){ |
一对一
Flight表1
2
3
4
5
6public function fly(){
//外键一般用当前模型的表名加ID 例如 flight_id
//这个外键是int类型或者是varchar类型都可以
//第三个参数是表内关联的键 也是就是当期模型的表所含的字段 外键是关联外部的表所含的字段
return $this->hasOne('App\Flys','flight_fid','airline');
}Fly表
1
2
3
4
5
6
7
8> function flight()
{
//默认外键为flight_id 这里的外键还是相对于Flight来说的 这是因为这个是belongsTO从属表 所以外键是位于表内字段
//return $this->belongsTo('App\Flight','f_id','airline');
//这里内键也是相对Flight说 其实是Flight的内部字段
return $this->belongsTo('App\Flight','flight_fid','airline');
}一对多
1
2
3
4
5
6
7
8
9
10
11
12/*
实际上在底层无论是hasOne方法还是belongsTo方法都可以接收额外参数,
比如如果user_accounts中关联users的外键是$foreign_key,该外键对应users表中的列是$local_key,
那么我们可以这样调用hasOne方法:
$this->hasOne('App\Models\UserAccount',$foreign_key,$local_key);
调用belongsTo方法也是一样:
$this->belongsTo('App\User',$foreign_key,$local_key);
此外,belongsTo还接收一个额外参数$relation,用于指定关联关系名称,
其默认值为调用belongsTo的方法名,这里是user。
* */多对多
1
2
3
4
5//注意我们定义中间表的时候没有在结尾加s并且命名规则是按照字母表顺序,
//将role放在前面,user放在后面,并且用_分隔
//所以RoleUser这个model必须指定表名 要不会出错的 protected $table = 'role_user';
//至于字段就没有说道了
$user = User::find(1);