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();
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanfbagb
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01