7 - laravel基础 - 数据库操作

连接数据库

配置 app 同级目录下的 .env 文件, 根据自己项目的实际情况配置即可

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=study_laravel
DB_USERNAME=root
DB_PASSWORD=123

运行原生SQL语句

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use DB;

class DBController extends Controller{
    public function index(){
        // 增加:
         $result = DB::insert("insert into articles(title,content) values('?','?')", [
            'title'   => 'test artcile title',
            'content' => 'test artcile contents'
        ]);
        dump($result);

        // 删除:
        $result = DB::delete("delete from articles where id=?", [11]);
        dump($result);

        // 修改: 
        $result = DB::update("update articles set title=?,content=? where id=?", [
            'updated title', 'updated content', '10'
        ]);
        dump($result);

        // 查询: 
        $data = DB::select("select * from articles where id= ? and title", [10]);
        dump($data);
    }
}

查询构造器

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use DB;
class DBController extends Controller{
    public function index(){
        // 增加:
        $result = DB::table('articles')->insert([
            'title'   => 'test title',
            'content' => 'test content'
        ]);
        dump($result);

        // 删除
        $result = DB::table('articles')->where('id', 10)->delete();
        dump($result);

        // 修改
         $result = DB::table('articles')->where('id', 13)->update([
            'title' => 'updated title',
            'content' => 'updated article content'
        ]);
        dump($result);
        
        // 查询
        $result = DB::table('articles')->get();
        dump($result);
    }
}

模型

  • 创建模型
php artisan make:model Articles
  • 设置模型
namespace App;

use Illuminate\Database\Eloquent\Model;

class Article extends Model {
    protected $table      = 'articles'; // 表名
    protected $primaryKey = 'id';       // 主键
    protected $guarded    = [];         // 不能被批量修改的字段
    protected $fillable   = ['title', 'content'];  // 能够被批量修改的字段 
    public    $timestamps = false;      // 是否开启时间戳字段
}
  • 使用模型
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Article;

class DBController extends Controller{
    public function index(){
        // 增加: 使用create方法字段必须可以被批量修改
       $article = [
            'title'   => 'model title',
            'content' => 'model create content'
        ];
        $resutl  = Article::create($article);
        
        // 删除,根据id删除, 查询指定的id删除
        $result  = Article::destroy(10);
        $result  = Article::where('id', 11)->delete();
        dump($result);

        // 修改
        $result  = Article::where('id', 15)->update([
            'title' => 'xiugai title',
            'content' => 'gengxin content',
        ]);
        dump($result);

        // 查询数据
        $result  = Article::where(['id'=>10])->get();
        dump($result);
    }
}


关联模型

关联关系

  • 一对一: 一个用户可以写多篇文章
  • 一对多: 一片文章有多个评论
  • 多对多: 多个角色有多个权限

一对一实例 hasOne('关联的模型', '外键', '主键')

数据表如下图所示

数据表
// ========== 用户模型 ==========
namespace App;
use Illuminate\Database\Eloquent\Model;

class User extends Model {
    protected $table      = 'users';
    protected $primaryKey = 'id';
    protected $guarded    =  [];
    public    $timestamps = false;

    // 使用hasOne方法关联 App\UserInfo 模型
    public function getInfo(){
        return $this->hasOne('App\UserInfo', 'user_id', 'id');
    }
    
}

// ========== 用户信息模型 ==========
namespace App;
use Illuminate\Database\Eloquent\Model;
class UserInfo extends Model {
    protected $table      = 'user_info';
    protected $primaryKey = 'id';
    protected $guarded    =  [];
    public    $timestamps = false;

    public function user(){
        return $this->hasOne('App\User', 'id', 'user_id');
    }
    
}
// ========== 连表查询 ==========
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
use App\UserInfo;

class DBController extends Controller{
    public function index(){
        // 1. 根据用户id查询详细信息
        $name = User::find(1)->getInfo->cn_name;
        //  等价于: $name = User::where('id', 1)->first()->getInfo->cn_name;
        dump($user);

        // 2. 根据详细信息id查询用户
        $info = UserInfo::where('id', 1)->get()[0];
        dump($info->user->name);
    }
}

一对多实例

数据表如下图所示

数据表设计
// ========== 用户模型 ==========
namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model {
    protected $table      = 'users';
    protected $primaryKey = 'id';
    protected $guarded    =  [];
    public    $timestamps = false;

    // 一对多使用hasMany方法关联 App\Article 模型
    public function article(){
        return $this->hasMany('App\Article', 'user_id', 'id');
    }
    
}
// ========== 文章模型 ==========
namespace App;

use Illuminate\Database\Eloquent\Model;

class Article extends Model {
    protected $table      = 'articles';
    protected $primaryKey = 'id';
    public    $timestamps = false;
    protected $guarded    = [];

    // 与 App\User 模型建立关联关系
    public function author(){
        return $this->belongsTo('App\User', 'user_id');
    }

}
// ========== 查询数据 ==========
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Article;
use App\User;

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

推荐阅读更多精彩内容