Laravel Eloquent 关联模型使用技巧

简介: 关联模型

关联模型


返回默认模型


这个特别重要!!!能避免关联数据不存在时导致的致命错误。


比如,我们可以在 belongsTo 关系中设置返回一个默认的模型,从而避免类似于使用 {{ $post->user->name }} 当 $post->user 不存在的时候,引起的致命的错误。


public function user()
{
    return $this->belongsTo('App\User')->withDefault();
}


在 Eloquent 关系中使用 OrderBy


可以在关联关系中直接指定 orderBy ()


比如设置关联关系的制售,指定根据name字段排序


public function products()
{
    return $this->hasMany(Product::class);
}
public function productsByName()
{
    return $this->hasMany(Product::class)->orderBy('name');
}


在 Eloquent 关系中添加条件


如果我们经常在模型关联关系中添加某些相同的 where 条件,可以抽取成一个独立方法。

指定和评论关联关系的同时,设置了approved=1,外部在调用的时候就可以直接调用这个方法了。


//指定和评论的关联关系
public function comments()
{
    return $this->hasMany(Comment::class);
}
//指定和评论关联关系的同时,设置了approved=1,外部在调用的时候就可以直接调用这个方法了。
public function approved_comments()
{
    return $this->hasMany(Comment::class)->where('approved', 1);
}


DB 原生查询: havingRaw ()


我们可以在很多地方使用原始数据库查询,比如在 groupBy() 后面调用 havingRaw()


Goods::groupBy('category_id')->havingRaw('COUNT(*) > 1')->get();


Eloquent 使用 has () 实现多层调用查询


我们可以在关联关系查询中使用 has() 实现两层关联查询。


// Teacher -> hasMany(Class::class);
// Class -> hasMany(Student::class);
$teachers = Teacher::has('classes.students')->get();


一对多关系中获取符合指定数量的数据


在一对多关系中,我们可以通过条件过滤,获取符合的数据。

比如需要查找有哪些老师负责的班级数量大于 5。


// Teacher -> hasMany(Class::class)
$teachers = Teacher::has('classes', '>', 5)->get();


一对多关系中一次创建多条关联数据


在一对多关系中,我们可以使用 saveMany() 通过一次提交,保存多条关联数据。


$article = Article::find(1);
$article->comments()->saveMany([    new Comment(['message' => 'First comment']),
    new Comment(['message' => 'Second comment']),
]);


多层级渴求式加载


在 Laravel 中,我们可以在一条语句中渴求式加载多个层级。


$users = App\Book::with('author.country')->get();


渴求式加载特定字段


我们可以在 Laravel 中渴求式加载并指定关联中的特定字段。


$users = App\Book::with('author:id,name')->get();


我们还可以在深层级中这样做,如第二层级关系:


$users = App\Book::with('author.country:id,name')->get();


相关文章
|
4月前
|
安全 PHP 数据库
laravel中模型中$fillable的用法
通过正确使用 `$fillable`属性,开发者可以有效地保护应用免受批量赋值漏洞的影响。它使得只有指定的字段可以被外部用户输入影响,为应用数据的安全性提供了一道防线。在开发使用Laravel框架的应用时,恰当地设置 `$fillable`或 `$guarded`属性是一项最佳实践。
122 1
|
5月前
|
数据库 开发者 Python
Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作
Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作
|
SQL IDE PHP
Laravel Eloquent 模型 使用技巧
Laravel Eloquent 模型使用技巧
136 0
|
SQL 数据库 索引
【Django学习】(六)ORM框架_关联模型_数据创建&查询&更新&删除&过滤
【Django学习】(六)ORM框架_关联模型_数据创建&查询&更新&删除&过滤
【Django学习】(六)ORM框架_关联模型_数据创建&查询&更新&删除&过滤
|
PHP UED
Laravel 使用关联模型延迟加载
本文将详细介绍如何在 Laravel 中配置和使用关联模型延迟加载。通过代码示例和演示的代码执行结果,展示了如何利用延迟加载提高应用程序的性能和效率。
133 1
|
存储 JSON 数据处理
最为常用的Laravel操作(1)-Eloquent模型
整理了 Laravel 框架 Eloquent 模型最常用的操作,包括一些常用的属性、方法,模型关联等。本系列共有 3 篇文章。
77 2
|
数据库连接 PHP 数据库
Yii2如何使用ActiveRecord?
Yii2如何使用ActiveRecord?
150 0
Laravel Eloquent 关联模型 进阶使用技巧
Laravel Eloquent 关联模型 进阶使用技巧
149 0
|
PHP 数据库
你可能不知道的 Laravel Eloquent 操作
你可能不知道的 Laravel Eloquent 操作
104 0
新版本 Laravel Eloquent 关联模型 使用技巧
新版本 Laravel Eloquent 关联模型 使用技巧
129 0