前几天在通过要求表A查询场面类型表B,然后经过表B的场面类型id去查询表C场所类型名的时候境遇了1个小的题目。

后天在经过须求表A查询场馆类型表B,然后通过表B的场馆类型id去查询表C场所类型名的时候遭受了3个小的标题。

laravel 嵌套的渴求式加载,laravel嵌套渴求

今天在经过供给表A查询场馆类型表B,然后经过表B的地方类型id去询问表C场馆类型名的时候碰到了一个小的标题。

需求表A的字段:id、user_id 、name等等;

深深sql多表差别化联合查询的题材详解,嵌套的渴求式加载。中间表B的字段:id、appeal_id、field_type_id;

场所类型表C的字段:id、display_name等等;

Appeal模型中:

public function appeal_field_type() {
   return $this->hasMany('App\Models\AppealFieldType');
}

public function field_type() {
    return $this->belongsTo('App\Models\FieldType')->select('id','display_name');
}

Appeal控制器中;

$result = Appeal::select('id','name')
    ->where('id',$id)
    ->with('appeal_field_type.field_type')
    ->first();
以上都是看了laravel学院的嵌套的渴求式加载,然后按照他上面说的方法,模仿着写了一下,结果这个方法一直报错,报“field_type”方法不存在,一开始琢磨不透,看了一遍右边appeal模型,检查过单词有没有写错,有没有引入模型,等等,都检查过了,我就觉得不对啊,我就是严格按照学院上写的嵌套的渴求式加载,但是就是不对。后来,我想,既然appeal_field_type这个方法是通过关联模型访问的,那么是不是他还是要通过AppealFieldType这个模型,去访问field_type这个方法,果然,我把fiel_type方法写到AppealFielType模型中,再去访问的时候,成功~
最终成功的结果:
Appeal模型中:

public function appeal_field_type() {
   return $this->hasMany('App\Models\AppealFieldType');
}

AppealFieldType模型中:

public function field_type() {
    return $this->belongsTo('App\Models\FieldType')->select('id','display_name');
}

Appeal控制器中:

$result = Appeal::select('id','name')
    ->where('id',$id)
    ->with('appeal_field_type.field_type')
    ->first();

主要原因是学院上这一块讲的不是特别清楚,不知道后面的那个方法应该写在哪个控制器中,所以出现了这么一个困扰萌新的问题~

澳门金沙国际, 嵌套的渴求式加载,laravel嵌套渴求
明天在经过必要表A查询地方类型表B,然后通过表B的场合类型id去询问表C场所类型名的时候境遇了…

本章简略讲述本人在实例开发中遇见的多表查询的难题
个中最主要讲述
select A.*,B.*,C.* from A,B,C

select A.*,B.*,C.* from 表A inner join 表B on A.id=B.id inner join
表C on A.code=C.code
的区别

需求表A的字段:id、user_id 、name等等;

需求表A的字段:id、user_id 、name等等;

前不久遇上贰个那样的门类需要——必要页面集合呈现七个关联表的音讯。
出于实在项目里涌出的字段相比多,以往简化表达如下:
table A 含有字段 UserName,CardCode,ItamCode
table B 含有字段 CardCode,CardName
table C 含有字段 ItamCode,ItamName

中间表B的字段:id、appeal_id、field_type_id;

中间表B的字段:id、appeal_id、field_type_id;

中间界面要在一个数额集里同时出现UserName,CardName,ItamName
话说纵然学过SQL
内联,外联的题材,然而从前的花色基本出现的都以三个表的关联实现,以后是首先次用到当先四个表的涉嫌实现难题。在百度找了一晃素材,才察觉原先基本原理是千篇一律的。哈,本身2018年才入职,经验不足,大神们,请别见笑哈!
呃,要是读者临时还目生SQL基本内联,外联的连带文化,请自觉找度娘面壁去哈,小编在此处不熬述了。长途电话短说,未来进来正题……

场合类型表C的字段:id、display_name等等;

场合类型表C的字段:id、display_name等等;

意识要落到实处地方的职能有二种方法,分别是
select A.UserName,B.CardName,C.ItamName from A,B,C

select A.UserName,B.CardName,C.ItamName from 表A inner join 表B on
A.CardCode=B.CardCode inner join 表C on A.ItamCode=C.ItamCode
(即使字段是差距化的话,能够略写表名)

Appeal模型中:

Appeal模型中:

就地方的语法来说,其实两种完成情势的效应是均等的,但若是真要较真细说优劣的话,如故其次种完成格局比较实用的。
用inner join(全外联)的写法, 不仅能够依据实际须要自由转会left
join(左外联)和right join(右外联),而且申明了组合的一一,
越发是支撑了SQL文优化的福利。

public function appeal_field_type() {
   return $this->hasMany('App\Models\AppealFieldType');
}

public function field_type() {
    return $this->belongsTo('App\Models\FieldType')->select('id','display_name');
}

Appeal控制器中;

$result = Appeal::select('id','name')
    ->where('id',$id)
    ->with('appeal_field_type.field_type')
    ->first();
以上都是看了laravel学院的嵌套的渴求式加载,然后按照他上面说的方法,模仿着写了一下,结果这个方法一直报错,报“field_type”方法不存在,一开始琢磨不透,看了一遍右边appeal模型,检查过单词有没有写错,有没有引入模型,等等,都检查过了,我就觉得不对啊,我就是严格按照学院上写的嵌套的渴求式加载,但是就是不对。后来,我想,既然appeal_field_type这个方法是通过关联模型访问的,那么是不是他还是要通过AppealFieldType这个模型,去访问field_type这个方法,果然,我把fiel_type方法写到AppealFielType模型中,再去访问的时候,成功~
最终成功的结果:
Appeal模型中:

public function appeal_field_type() {
   return $this->hasMany('App\Models\AppealFieldType');
}

AppealFieldType模型中:

public function field_type() {
    return $this->belongsTo('App\Models\FieldType')->select('id','display_name');
}
public function appeal_field_type() {
   return $this->hasMany('App\Models\AppealFieldType');
}

public function field_type() {
    return $this->belongsTo('App\Models\FieldType')->select('id','display_name');
}

Appeal控制器中;

$result = Appeal::select('id','name')
    ->where('id',$id)
    ->with('appeal_field_type.field_type')
    ->first();
以上都是看了laravel学院的嵌套的渴求式加载,然后按照他上面说的方法,模仿着写了一下,结果这个方法一直报错,报“field_type”方法不存在,一开始琢磨不透,看了一遍右边appeal模型,检查过单词有没有写错,有没有引入模型,等等,都检查过了,我就觉得不对啊,我就是严格按照学院上写的嵌套的渴求式加载,但是就是不对。后来,我想,既然appeal_field_type这个方法是通过关联模型访问的,那么是不是他还是要通过AppealFieldType这个模型,去访问field_type这个方法,果然,我把fiel_type方法写到AppealFielType模型中,再去访问的时候,成功~
最终成功的结果:
Appeal模型中:

public function appeal_field_type() {
   return $this->hasMany('App\Models\AppealFieldType');
}

AppealFieldType模型中:

public function field_type() {
    return $this->belongsTo('App\Models\FieldType')->select('id','display_name');
}

再有三个视为当作者某些字段能够为null的时候,第①种查询艺术得出的值其实是不完全的。比如说小编上边的事例中当table
C 的ItanName 并非必填的时候,只好通过左外连接(left
join)来兑现大家需求的作用。
有趣味的同班能够协调操作一下,验证下两种办法的不比。

Appeal控制器中:

Appeal控制器中:

其中首要描述 select A.*,B.*,C.* from A,B,C 和 select A.*,B.*,C.*
from 表A inner join 表B on A.id=B…

$result = Appeal::select('id','name')
    ->where('id',$id)
    ->with('appeal_field_type.field_type')
    ->first();

主要原因是学院上这一块讲的不是特别清楚,不知道后面的那个方法应该写在哪个控制器中,所以出现了这么一个困扰萌新的问题~
$result = Appeal::select('id','name')
    ->where('id',$id)
    ->with('appeal_field_type.field_type')
    ->first();

主要原因是学院上这一块讲的不是特别清楚,不知道后面的那个方法应该写在哪个控制器中,所以出现了这么一个困扰萌新的问题~

相关文章