whereHas
是可以允许我们向关联来加入
where
的查询约束,但是这里有一个问题,
whereHas
是仅支持单条 sql 查询的,也就是说
whereHas
本身是不支持跨库查询的。如果想要学习
whereHas
的用法,可以参考:https://learnku.com/docs/laravel/9.x/eloquent-relationships/12252#d361f0
这几天使用
whereHas
, 遇到了一个问题,如下
举个例子,有这样两个表,分别存在不同的数据库里
database1.A
database2.B
PHP 类如下
class A{
protected $table = 'A';
public function B()
return $this->belongsTo(B::class, 'b_id', 'id');
class B{
protected $table = 'B';
然后我们想这样使用
$query = A::query();
$obj->whereHas('B', function ($q) {
$q->where('xxx', xxx)
});
这个时候会报错 Base table or view not found
因为 A表和 B表分别在不同的数据库里,也就是不在同一个数据库里。我们可以把 sql 打印出来
select * from `A` where exists (select * from `B` where `A`.`b_id` = `B`.`id` and `xxx` = xxx)
这样的 sql 肯定跑不通嘛!单条SQL不支持跨库查询
那只能加多一个 数据库前缀,修改的代码如下:
$query = A::query();
$obj->whereHas('B', function ($q) {
$q->from('database2.B')->where('xxx', xxx)
});
翻译来源:https://github.com/alexeymezenin/laravel-best-practices单一职责原则不要这样做:public function getFullNameAttribute()
if (auth()->user() && auth()->user()->hasRole('client') &&...
1.with相当于是去用关联模型去关联另一张表,另一张表中没有数据了也会将主表的数据展示出来
RoomInfo::query()->where('shop_code', $data['shop_code'])
->with(['item_arranging' => function ($query) use ($week) {
$query->select('item_code', 'date', 'start_
好像whereHas方法不能很好地工作.$res = Entreprise::whereHas('labels',function ($q){$q->where('hidden','!=',1);})->whereHas('labels',function ($q){$q->whereHidden(1);})->get();dd(count($res)); //shows...
用 Laravel 很久了,whereHas 简直是连表大杀器,本来需要写大量 SQL 的查询用 whereHas 都可以很快的实现。不过在一些场景里,遇到了严重的性能问题。我们有个A表,大约是百万级数据,与之关联的有个B表,大约万级数据。在做关联查询的时候我们自然使用 A::whereHas('b', function(){...}) 。后来发现了许多慢查询,仔细一看发现,Laravel 的 ...
`gs_store_goods`
INNER JOIN `gs_store_goods_corner_marks` ON `gs_store_goods`.`id` = `gs_store_goods_cor...
我有会员模型分类帐模型class Member extends Model{public function ledger(){return $this->hasMany('App\Ledger','user_id');}}我必须获取成员的分类账记录(既需要成员又需要分类账数据),其中ledger.created_at =特定日期,例如ledger.created_at = 2017-03-2...
查了好多资料,才发现原来laravel 框架会把配置文件缓存,目的是
为了给应用加速,使用 Artisan 命令config:cache将所有配置文件的配置缓存到单个文件里,这将会将所有配置选项合并到单个文件从而可以被框架快速加载。
应用一旦上线,就要运行一次php artisan config:cach...
Laravel ORM中with,wherehas使用和区别
with -预加载
当作为属性访问 Eloquent 关联时,关联数据是「懒加载」的。意味着在你第一次访问该属性时,才会加载关联数据。不过,是当你查询父模型时,Eloquent 可以「预加载」关联数据。预加载避免了 N + 1 查询问题。要说明 N + 1 查询问题,试想一个 Book 模型关联到 Author 模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model