1.with相当于是去用关联模型去关联另一张表,另一张表中没有数据了也会将主表的数据展示出来
RoomInfo::query()->where('shop_code', $data['shop_code'])
->with(['item_arranging' => function ($query) use ($week) {
$query->select('item_code', 'date', 'start_time', 'end_time', 'room_id');
}])->get();
2.wherehas是可以根据条件去筛选另一张表,另一张表中没有数据了不i会将另一张表中的数据展示出来
ItemInfo::query()->whereHas('item_arranging', function ($query) use ($week, $data) {
$query->where('shop_code', $data['shop_code'])->select('item_code', 'date', 'start_time', 'end_time', 'room_id')
->with(['room_info' => function ($query) {
$query->select('id', 'room_name');
}]);
})->select('item_code', 'item_name')
->get();
1.with相当于是去用关联模型去关联另一张表,另一张表中没有数据了也会将主表的数据展示出来RoomInfo::query()->where('shop_code', $data['shop_code']) ->with(['item_arranging' => function ($query) use ($week) { $query->select('item_code', 'date', 'start_
with()
with()方法是用作“渴求式加载”的,那主要意味着,laravel将会伴随着主要模型预加载出确切的的关联关系。这就对那些如果你想加在一个模型的所有关联关系非常有帮助。因为“渴求式加载”缓解了1+N的查询问题,仅需1+1次查询就能解决问题,对查询速度有了质的提升。
user > hasMany > post
1 $users = User...
Laravel ORM中with,wherehas使用和区别
with -预加载
当作为属性访问 Eloquent 关联时,关联数据是「懒加载」的。意味着在你第一次访问该属性时,才会加载关联数据。不过,是当你查询父模型时,Eloquent 可以「预加载」关联数据。预加载避免了 N + 1 查询问题。要说明 N + 1 查询问题,试想一个 Book 模型关联到 Author 模型:
namespace App;
use Illuminate\Database\Eloquent\Model
$data = Content::whereIn('id',$ids)
->select('id')
// ->orderBy(\DB::raw('FIND_IN_SET(id, ' . implode(,, $ids) . '' . )))
// ->orderBy(DB::raw(FIND_IN_SET(id,
Laravel:^ 6.0 || ^ 7.0 || ^ 8.0
composer require mpyw/eloquent-has-by-non-dependent-subquery
假设您具有以下关系:
class Post extends Model
use SoftDeletes ;
public function comments (): HasMany
return $ this -> hasMany ( Comment ::class);
class Comment extends Model
use SoftDeletes ;
如果使用has(
某客户反馈ERP经常卡死,线上商城也会经常卡住,使用脚本看了一下正在执行的脚本,定位到了一个会员积分扣减的存储过程,大概长这个样子
CREATE PROCEDURE Sp_CRM_MembersDeductionIntegral
@CardCode varchar(40), --会员卡号
@MobilPhone nvarchar(20), --手机号码
@SourceType int, --扣减类型枚举 0:ERP,1:线上商城
@Integral de...
larave在哪里
Laravel wherehasin是一个可以Laravel ORM关联关系查询性能的扩展包,可以替代Laravel ORM中的whereHas以及whereHasMorphIn查询方法。
PHP> = 7
laravel> = 5.5
composer require dcat/laravel-wherehasin
Laravel的关联关系查询whereHas在日常开发中给我们带来了极大的便利,但是在主表数据量比较多的时候会有比较严重的性能问题,主要是因为whereHas用了where exists (select * ...)这种方式去查询关联数据。
通过这个扩展包提供的whereHasIn方法,可以把语句转换为where id in (select xxx.id ...)的形式,从而提高查询性能,下面我们来做一个简单的对比:
当主表数据量减少
with 渴求式预加载 可以有效的避免 N+1 问题,用法如下:
$books = App\Book::with('author')->get();
如果有多个关联关系可以用“,”隔开,还可以使用闭包来对关联关系进行限制,向下面这样:
//查询所有的用户,查询条件:发布过标题中有first的post
$users = User::with(['posts' => function ...
####使用with时 with()方法是用作“渴求式加载”的,那主要意味着,laravel将会伴随着主要模型预加载出确切的的关联关系。这就对那些如果你想加在一个模型的所有关联关系非常有帮助。因为“渴求式加载”缓解了1+N的查询问题,仅需1+1次查询就能解决问题,对查询速度有了质的提升。支持过滤条件
$groupInfo = $this->class::where('site_id',$id...
i'm currently using this code in my own project
my Model (\App\Production\Models\Production Model)
public function detail(...
composer报错composer.json requires PHP extension ext-pcntl * but it is missing from your system
composer报错composer.json requires PHP extension ext-pcntl * but it is missing from your system
git clone出现 fatal: unable to access ‘https://github.com/...