双剑合璧视频笔记

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);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容

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