Laravel使用记录(五)模型

11 篇文章 0 订阅
10 篇文章 0 订阅
8.模型

在介绍模型之前,我们需要了解一下Eloquent ORM。但是关于Eloquent ORM,文档介绍的比较少,只说了它提供了漂亮、简洁的 ActiveRecord 实现来和数据库交互,算了直接开始吧。

8.1 新建模型

同样使用artisan命令,由于模型也不止一个,为了方便管理,我们统一放在Models下,下面我们新建模型。

php artisan make:model Models/Site
php artisan make:model Models/ArticleData

模型名称一般采用大驼峰式命名,形式为单数(不加s)。

那么模型对应的是哪个表呢?你以为是site,article_data?那就大错特错了,它对应的是sites和article_datas。默认使用的是类的复数形式蛇形命名作为表名。

那是不是就只能按照这个来建表呢?当然不是,没有什么框架会规定的这么死板,我们可以通过属性$table来自定义该模型关联的数据表。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Site extends Model
{
    protected $table = 'site';
}

此时我们的Site模型关联的数据表不再是sites而是site。

8.2 使用模型

首先自然是引入

use App\Models\Site

由于模型涉及类和方法较多,暂时只介绍几个主要的类,并且不做过多介绍,仅介绍常用的方法。
主要涉及的类:

Illuminate\Database\Eloquent\Model//模型类
Illuminate\Database\Query\Builder//查询构造器类
Illuminate\Support\Collection//结果集类

数据表结构如下

CREATE TABLE `site` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `title` varchar(255) NOT NULL,
 `content` text NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4

1.增加数据

    public function store()
    {
        $data = array('title'=>'title data', 'content'=>'content data');
        $res  = Site::insert($data);//返回值为bool值,true or false
    }

返回值是bool值,true为成功,false为失败。

2.修改数据

    public function update()
    {
        $data    = array('title'=>'title data update', 'content'=>'content data update');
        $res     = Site::where('id','=',1)->update($data);//返回值int 0 or 1
    }

返回值为int,1代表数据已更新,0代表数据未更新。
因为更新需要加限制条件,所以我们使用了where,参数有三个,第一个是字段名,第二个是运算符,第三个是字段值。

此时可能会报错

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'updated_at' in 'field list'

那是因为Eloquent会默认数据表中存在created_at和updated_at这两个字段,更新的时候触发了更新updated_at,由于表中没有该字段,所以更新出错。解决办法,第一,加上这两个字段,第二去掉这两个字段。如果我们不需要这两个字段,只需要在模型中把$timestamps属性设置为false即可。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Site extends Model
{
    protected $table   = 'site';
    public $timestamps = false;
}

3.查询数据

查询所有数据

    public function show()
    {
        $collection = Site::select('id','title','content')->get();
        $data       = $collection->toArray();
    }

默认get返回的是Collection对象,我们需要转化为数组为我们所用。
查询一条数据

    public function show()
    {
        $collection = Site::select('id','title','content')->find(1);
        $data       = $collection->toArray();
    }

基于id查询满足条件的一条数据。相当于添加where(‘id’,’=’,1)。

这里的select并非查询出结果的select的,而是设置输出字段

select id,title,content from site

如上述中的id,title,content。

4.删除数据

    public function destroy()
    {
        $res = Site::where('id','=',1)->delete();
    }

以上就是简单的增删改查了,其实Builder中还有很多方法,以后会慢慢介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值