Laravel的模型也是访问数据库的,它更加面向对象,一个模型对应着一张表 我们可以使用模型对数据做一些增删改查的操作。


1 创建模型

创建模型是可以使用Artisan控制台的:

php artisan make:model Article

一般我比较喜欢连带着migration一起生成:

php artisan make:model Article -m

↑ 执行了上面的Artisan命令后 我们就可以在 /app 下找到我们刚刚创建的模型了,顺便也生成好了migration。


2 模型常用属性

2.1 自定义表名

一个model对应一个表,model对应的表名默认是model名字的复数 即:Article(Model)对应Articles(Table),User(Model)对应Users(Table)。

当然 如果你的Model不想用这种默认方式 也可以自定义:

class Article extends Model
{
protected $table = 'K_Articles';
}

2.2 自定义主键

Model的主键默认是id,你也可以自定义:

class Article extends Model
{
protected $primaryKey = 'article_id';
}

2.3 时间戳

在咱的数据表之中 有create_at 和 update_at 两个时间戳 是Laravel自动管理的,如果你不想要自动管理这两个列 可以这样做:

class Article extends Model
{
public $timestamps = false;
}

2.4 白名单和黑名单

当我们用到批量创建和批量修改时 必须声明黑名单或白名单,在白名单中的属性是可以填充的属性,在黑名单中的属性是不允许被填充的属性:

class Article extends Model
{
protected $fillable = ['title', 'body'];
}

注意:不知道怎么用没关系,3.2我们就会说批量创建。


3 创建数据(模型)

创建模型有两种方法,第一种就是普通的创建,第二种是批量创建。

3.1 普通创建模型

普通创建就是新建一个模型:

    public function getCreateArticle()
{
$article = new Article();
$article->title = 'One';
$article->body = 'Learn Laravel Model';
$article->save();
}

3.2 批量创建

批量赋值就是使用create方法来生成一个model并返回这个新插入的model,在你使用create前必须检查model中是否声明了黑名单或白名单:

class Article extends Model
{
protected $fillable = ['title', 'body'];
}

↑ 这是我们的白名单

    public function getCreateArticle()
{
$article = Article::create(['title'=>'Two', 'body'=>'Test Create Model', 'comment_count'=>10]);
}

↑ 这是批量创建模型,有个细节哈 我们在fillable中没有添加comment_count 但是create方法中的数组有comment_count的键值。。。结果呢 comment_count并没有被填充,原因是:它不在白名单中 或者 它在黑名单中。


4 更新

更新跟插入很像,也有两种方法 普通的 和 批量的。

4.1 普通更新

    public function getUpdateArticle()
{
$article = Article::find(1);
$article->title = 'Article_One';
$article->save();
}

4.2 批量更新

    public function getUpdateArticle()
{
$article = Article::find(3);
$article->update(['title' => 'Three', 'body' => 'Third']);
}

5 查找

其实Model的查找跟之前我们学过的构建器很像。

5.1 获取全部的模型

    public function getIndex()
{
$articles = Article::all();
foreach ($articles as $article) {
echo $article->title . '<br />';
echo $article->body . '<br />';
}
}

5.2 获取单个模型

使用find 通过主键查找:

    public function getIndex()
{
$article = Article::find(1);
dd($article->body);
}

我们也可以判断是否取到了Model:

    public function getIndex()
{
$article = Article::find(2);
if (!isset($article)){
abort(404,'Not Found');
}
dd($article);
}

当未取到值是自动报错 应对这种场景 也可以使用findOrFail:

    public function getIndex()
{
$article = Article::findOrFail(2);
dd($article);
}

5.3 通过约束获取模型

这就是和构建器相似的地方,你可以像约束构建器一样约束它 这里就不多说了 给了例子吧:

    public function getIndex()
{
$article = Article::where('id','>',2)->orderBy('comment_count','desc')->lists('title')->toArray();
dd($article);
}

今天先写这么多,明天说下Model的删除功能。

Laravel5.1 模型初探的更多相关文章

  1. C语言与内存模型初探

    #include<stdio.h> #include<string.h> int main(){ long long int a = 2<<30; char str ...

  2. Python自动化之select、greenlet和gevent和事件驱动模型初探

    进程.线程和协程的区别 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度. 线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的). 协程和线程一样 ...

  3. (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探

    一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...

  4. 条件随机场(conditional random field,CRF)模型初探

    0. 引言 0x1:为什么会有条件随机场?它解决了什么问题? 在开始学习CRF条件随机场之前,我们需要先了解一下这个算法的来龙去脉,它是在什么情况下被提出的,是从哪个算法演进而来的,它又解决了哪些问题 ...

  5. tensorflow学习5----GAN模型初探

    生成模型: 通过观测学习样本和标签的联合概率分布P(X,Y)进行训练,训练好的模型能够生成符合样本分布的新数据,在无监督学习方面,生成式模型能够捕获数据的高阶相关性,通过学习真实数据的本质特征,刻画样 ...

  6. css3之弹性盒模型初探(一)

    什么是弹性盒模型? 弹性盒模型是指在父级改变大小的时候内部的自己元素也会相应的改变大小,即子集会按照父级的大小按比例自适应大小. 弹性盒模型的提出可以解决一些响应式布局的需求   如何使用弹性盒模型? ...

  7. Laravel5.1 模型 --远层一对多关系

    远层一对多我们可以通过一个例子来充分的了解它: 每一篇文章都肯定有并且只有一个发布者 发布者可以有多篇文章,这是一个一对多的关系.一个发布者可以来自于一个国家 但是一个国家可以有多个发布者,这又是一个 ...

  8. Laravel5.1 模型 --多对多关系

    多对多关系也是很常用的一种关系,比如一篇文章可以有多个标签,一个标签下也可以有多篇文章,这就是一个典型的多对多的关系. 1 实现多对多关系 多对多关系我们需要三张表,一张是文章另一张是标签,第三章表是 ...

  9. Laravel5.1 模型 --一对多关系

    一对多关系算是比较常用的一种关联关系了,关于一对多我们可以用 文章对应评论 来举例:一篇文章可以有多个评论,但是一个评论只属于一篇文章. 这就是一对多关系. 1 实现一对多关系 我们先来准备两个模型, ...

随机推荐

  1. ES6/ES2015核心内容(下)

    import export 这两个家伙对应的就是es6自己的module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小工 ...

  2. 搭建svnserve并创建提交钩子

    之前做过很多这个过程了,但每次总有些地方不记得要查资料,现在顺手记录一下,以后好查. 安装svn apt-get install subversion 创建代码仓库 svnadmin create & ...

  3. Node.js meitulu图片批量下载爬虫1.06版

    //====================================================== // https://www.meitulu.com图片批量下载Node.js爬虫1. ...

  4. Linux经常使用命令(十五) - which

    我们常常在linux要查找某个文件,但不知道放在哪里了.能够使用以下的一些命令来搜索: which  查看可运行文件的位置. whereis 查看文件的位置. locate   配合数据库查看文件位置 ...

  5. Oracle表空间不足处理

    异常信息: 异常信息(异常类型:System.Data.OracleClient.OracleException) 异常提示:Oracle数据执行异常,请联系管理员处理 异常信息:ORA: 表 LC0 ...

  6. atitit.MyEclipse10 中添加svn插件故障排除

    atitit.MyEclipse10 中添加svn插件故障排除 删除\configuration \org.eclipse.update 不行... 二. 在configuration下的config ...

  7. Quartz简介 用 Quartz 进行作业调度

    http://www.ibm.com/developerworks/cn/java/j-quartz/现代的 Web 应用程序框架在范围和复杂性方面都有所发展,应用程序的每个底层组件也必须相应地发展. ...

  8. python with上下文的浅谈

    python中的with一般用于上下文管理,什么是上下文管理,其实平时我们经常会用到,比如连接数据库 查询数据,操作完成后关闭连接. 还比如打开文件写入数据等操作. 具体实例: class Myres ...

  9. H5网站模板——前台和后台

    以下是比较典型的前台或者后台的H5模板: html5优分期大学生分期购物商城模板链接:http://pan.baidu.com/s/1dEUAzBz 密码:j150 红色的五金电气商城网站模板链接:h ...

  10. oracle10g安装,卸载

    一.安装 1.因为oracle的特殊性,笔者选择通过虚拟机安装windows7旗舰版安装数据库,大家的系统假设是windows xp.windows 7,windows 8能够直接安装,windows ...