Laravel5 Eloquent ORM 查询
2018-04-02 17:09
871 查看
Subject.php
<?php namespace App\Models; /** * 题目表 * * Class Subject * @package App\Models */ class Subject extends BaseModel { /** * 数据表 * */ protected $table = 'subjects'; /** * 主键 * */ protected $primaryKey = 'subject_id'; /** * 关联科目类型 * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function subjectClass() { return $this->belongsTo('App\Models\SubjectClass', 'class_id', 'class_id'); } }
TestController.php
public function testOne() { // 特别注意 class_id,class_id 是关联字段 $data = Subject::where('subject_id', 1)->with(['subjectClass' => function($query) { $query->select('class_id','class_name'); }])->select('class_id','subject_id')->first(); } public function testTwo() { $args = ['class_id','class_name']; $mainArgs = ['class_id', 'subject_id', 'created_at']; $data = Subject::where('subject_id', 1)->with(['subjectClass' => function($query) use ($args, $mainArgs) { $query->select($args); }])->select($mainArgs)->first(); } public function testThree() { $data = Subject::where('subject_id', 1)->with('subjectClass')->first(); } public function testFour($created_at) { // whereHas 和 orWhereHas 允许添加自定义条件约束到关联关系条件约束,只显示 subjects 表数据 $data = Subject::where('subject_id', 1)->whereHas('subjectClass', function ($query) use ($created_at) { $query->where('created_at', $created_at); })->first(); } public function testFive() { // 输出 SubjectClass 对象信息 $data = Subject::find(1)->subjectClass()->first(); dd($data); } public function testSix() { // 输出 SubjectClass 对象信息 $data = Subject::find(1)->subjectClass; dd($data); }
PS:
with方法可以进行简化,在 Model 基类中定义一个范围查询
use Illuminate\Database\Eloquent\Model; class BaseModel extends Model{ // 注意 scopeWithOnly public function scopeWithOnly($query, $relation, Array $columns) { return $query->with([$relation => function ($query) use ($columns){ // 这里根据具体业务进行调整,有些表可能不含有 id 字段 $query->select(array_merge(['class_id'], $columns)); }]); } }
$data = Subject::where('id', '>', '10')->withOnly('subjectClass', ['class_name'])->get();
相关文章推荐
- Laravel Eloquent ORM 时如何查询表中指定的字段
- 【Laravel】Eloquent ORM的底层实现
- Laravel入门教程(五)- 数据库操作 - Eloquent ORM
- Laravel Eloquent ORM Active Recode
- gorose, 最像 laravel's eloquent 的go数据库操作orm, 风骚的链式调用, 让你深深陷入不能自拔
- Laravel基础-Eloquent ORM 模型
- 在 CodeIgniter 中使用 Laravel Eloquent ORM
- Laravel Eloquent ORM--整理
- Laravel学习笔记(六)---操作数据库--Eloquent ORM(对象关系映射)
- laravel--6 eloquent查询作用域
- gorose, 最像 laravel's eloquent 的go数据库操作orm, 风骚的链式调用, 让你深深陷入不能自拔
- laravel - Eloquent ORM 快速使用
- Laravel Eloquent模型分组查询并返回每个分组的数量 groupBy()
- laravel - Eloquent ORM 快速使用
- 给 CI 插上翅膀——在 CodeIgniter 2 中使用 Laravel Eloquent ORM
- laravel组件单独加载(2):模型 Eloquent ORM
- PHP框架 Laravel Eloquent ORM 批量插入数据 && 批量更新目前没有
- Laravel数据库操作之-Eloquent ORM
- Laravel 5框架学习之Eloquent (laravel 的ORM)
- Laravel之Eloquent ORM关联