双剑合璧视频笔记

php -S localhost:8000 -t xiaohu/public -- S是指server,测试用的,t指定入口文件在哪里

封装函数

// 获取传递的参数
   function rq($key=null,$default=null)
{
    if (!$key) return \Request::all();
    return \Request::get($key,$default);
}
// 分页 第几页和每页多少条数据
function paginate($page=1,$limit=16)
{
    $limit = $limit ?:16;
    $skip = ($page ? ($page-1) :0 ) * $limit;
    return [$limit,$skip];
}
// 错误信息
function err($msg = null)
{
    return ['status'=>0,'msg'=>$msg];
}
// 正确的信息 参数是一个数组
function suc($data_to_merge = [])
{
    $data = ['status'=>1,'data'=>[] ];
    if ($data_to_merge)
    <!-- 让新数据he和$data['data']合并 -->
        $data['data'] = array_merge($data['data'],$data_to_merge);
    return $data;
}

/*
 * 获取用户信息api
 */
public function read()
{
    if (!rq('id'))
        return err('id required');
    $get = ['id','username','avatar_url','intro'];
//        $this->get($get);  //取到的值是带有$get字段的所有数据
    $user = $this->find(rq('id'),$get); // 的得到的是id=rq('id')的数据,取值是$get数组内的数据
    
    dd($user->toArray());
    
    
    $user = $this->find(rq('id'),$get);
    $answer_count = $user->answers()->get()->toArray();
    dd($answer_count );
    这个时候得到的是answer表和answer_user表合并的数据
}

Migration

 创建表
php artisan make:migration create_table_answers --create=answers
   
修改表名   
Schema::rename('table1','table_1');

php artisan migrate --pretend   --预览要生成的sql语句
php artisan migrate   //生成table

php artisan make:migration create_table_users --create=users


Request::has('age');   //返回类型是bool值
Request:get('age');    //有则返回值,没有则返回null


$table->unsignedInteger('user_id');  //int(10)不为负数
$table->foreign('user_id')->references('id')->on('users'); //添加外键

设置唯一索引,可以写单个字段,也可以写在一个数组里面
$table->unique(['user_id','answer_id','vote']);

投票表里面,一个用户只能给一个问题,投一个票,所以这三个参数都可以设置唯一索引
public function up()
{
    Schema::create('answer_user', function (Blueprint $table) {
        $table->increments('id');
        $table->unsignedInteger('user_id');
        $table->unsignedInteger('answer_id');
        $table->unsignedSmallInteger('vote');

        $table->timestamps();

        $table->foreign('user_id')->references('id')->on('users');
        $table->foreign('answer_id')->references('id')->on('answers');
        $table->unique(['user_id','answer_id','vote']);
    });
}

组合数组建立的唯一索引,是整个数组唯一,并不是某个字段唯一。比如,这三个字段的值分别是1,2,3.其他数据的值只要不是这组数据即可

数据库操作问题

where里面可以是key,value形式,也可以是数组的形式。但是数组的形式可以存放多个条件
$this->where(['question_id'=>rq('question_id'),'user_id'=>session('user_id')])->count(); 


//获取传过来的数据,如果键存在,则取对应的值,否则取全值
function rq($key=null,$default=null)
{
    if (!$key) return \Request::all();
    return \Request::get($key,$default);
}


检查是否登录
public function is_logged_in()
{
    return session('user_id') ? :false;
}


 下面两句话是相等的,都是hash加密
 $hashed_password = Hash::make($password);
 $hashed_password = bcrypt($password);
 
 检验连个hash值是否相同 check
 Hash::check(rq('old_password'),$user->password)
 
 $this->save()  
 比其他插入方式的优势在于,这种方法即使有不能为空的字段,他能做相当于更新的操作。自动赋默认值
 
 
 有时候使用外键在插入数据的时候可能会出现1452的问题,暂时还不知道怎么解决。但是删除外键就可以了
 
 
 多对多的关联模型
 newPivotStatement()  此方法可以使我们操作关联的数据库

查看问题的api

    public function read()
    {
//        请求参数中国是否有id,有则返回id所在的行
        if (rq('id'))
            return ['status'=>1,'data'=>$this->find(rq('id'))];

//        limit条件
        $limit= rq('limit')?:15;
//        skip条件  用于分页
        $skip = ( rq('page') ? rq('page')-1 : 0 ) * $limit;
//        构建query并返回collection数据
        $r = $this
            ->orderBy('created_at')
            ->limit($limit)
            ->skip($skip)
            ->get(['id','title'])
            ->keyBy('id');
        return  ['status'=>1,'data'=>$r];
    }
    
    $limit = $limit ?:16;   这个限制条件为真(或者存在值),就使用当前值;没有值ze则默认使用16

关联模型

class User extends Model
{
    /**
     * 获取与用户关联的电话号码
     */
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}
第一个传到 hasOne 方法里的参数是关联模型的类名。一旦定义好两者之间关联,我们就可以通过使用 Eloquent 的动态属性来获取关联纪录。
动态属性允许你访问关联函数,如同他们是定义在模型中的属性

$phone = User::find(1)->phone;

当然,因为所有的关联也都提供了查询语句构造器的功能,因此你可以对获取到的评论进一步增加条件,
通过调用 comments 方法然后在该方法后面链式调用查询条件:

$comments = App\Post::find(1)->comments()->where('title', 'foo')->first();

$vote_ins = $answer->users()
        ->newPivotStatement()
        ->where('user_id',session('user_id'))
        ->where('answer_id',rq('id'))
        ->get();
    dd($vote_ins);
    上面代码得到的是 answer_user 表里面的数据,得到的是一维数组 get()[0]->vote;
    如果没有 newPivotStatement() 得到的是answer和user表合并的数据,得到的是一个集合
    get()[0]->username;
    
    $answer->users()  得到的是answer表和users表的关联模型
    newPivotStatement()  得到的是answer_user 表的模型
    
    $answer
        ->users()
        ->attach(session('user_id'));  
        这个时候得到的是answer_user表里面的数据,指定了user_id

当涉及到删除带有外键索引的数据时

当涉及到删除带有外键索引的数据时,要先删除外键关联的书记,然后再删除ben tiao本条数据
        先删除此评论下的所有回复
     $this->where('replay_to',rq('id'))->delete();
     再删除本评论
    return $comments->remove() ? ['status'=>1]: ['status'=>0,'db delete failed'];
  • 通用api,我们每个model内的方法一般都仅限于本model内;通用api要you有跨表查询的功能。

  • 多对多关系,两个表之间要建立一个连接表。连接表的表名不需要是复数

  • 取随机数 rand(1000,9999);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,437评论 19 139
  • 1.元月2日156斤开始至4月4日131.8斤,历时3个月零2天,减重24.2斤。 2.4月4日~4月4月19日,...
    石话石说简书阅读 193评论 0 0
  • #pragma mark - - 计算时间用 -------------分割线 开始 ------------- ...
    失忆的程序员阅读 553评论 0 1
  • 公元9017年1月1日,胶囊公寓的墙壁换了一种新的颜色,这是他庆祝元旦的方式,没有新年的钟声,更没有绚丽的烟火,或...
    艾迪蓝波阅读 1,428评论 0 56
  • “在没有英雄的时代,我只想做个人。”这是诗人北岛为我们在这个世界中寻找到的舒适位置。或许是因为伟人、英雄、领袖的时...
    二婶不用洗脚盆阅读 504评论 2 3

友情链接更多精彩内容