Laravel 雄辩的范围-其他表中不包含FK的所有项目
首先,了解一下创建查询范围的区别 以下是我的模式的一部分:Laravel 雄辩的范围-其他表中不包含FK的所有项目,laravel,eloquent,Laravel,Eloquent,首先,了解一下创建查询范围的区别 以下是我的模式的一部分: Structure - id - head_office_id Establishment - id - structure_id 下面是如何在我的模型中定义关系 class Structure { public function head_office(): BelongsTo { return $this->belongsTo(Establishment::class, 'h
Structure
- id
- head_office_id
Establishment
- id
- structure_id
下面是如何在我的模型中定义关系
class Structure {
public function head_office(): BelongsTo
{
return $this->belongsTo(Establishment::class, 'head_office_id');
}
public function establishments(): HasMany
{
return $this->hasMany(Establishment::class);
}
}
class Establishment {
public function structure(): BelongsTo
{
return $this->belongsTo(Structure::class);
}
}
我想提出一个有关机构单位的范围,该范围可不包括作为其所属机构总部的所有机构单位
Establishment::notHeadOffice()->get()
例如:
Structures
id | head_office_id
1 | null
2 | 3
Establishments
id | structure_id
1 | 1
2 | 1
3 | 2
4 | 2
5 | 2
在这种情况下,范围应包括除3号机构以外的所有机构,因为机构3与结构2相连,并且是该结构的总部
我尝试了一些方法,但这超出了我对查询生成器的了解
有什么线索吗
PS:模型无法更改您可以在范围方法中生成查询 下面的代码有效 restitution.php 控制器 参考资料: 若存在,则为Laravel- 不存在的Laravel-
MySQL存在-测试通过!谢谢。
namespace App;
use Illuminate\Database\Eloquent\Model;
use DB;
class Establishment extends Model
{
public function scopeNotHeadOffice($query)
{
return $query->whereNotExists(function ($qry) {
$qry->select(DB::raw(1))
->from('structures')
->whereRaw('structures.head_office_id = establishments.id');
});
}
public function structure(): BelongsTo
{
return $this->belongsTo(Structure::class);
}
}
Establishment::notHeadOffice()->get();