您是否不能像这样在Component模型上定义关系:
class Component { public function firstProcess() { return $this->hasMany(Process::class)->orderBy('order')->take(1); } }
然后执行以下操作:
我有些嵌套的一对多关系如下:
[Enquiry
hasMany Item
] >>
[Item
hasMany Component
] >>
[Component
hasMany Process
] >>
想象一下我已经加载了Enquiry
模型。现在,我想访问由Process
中称为Component
]的列排序的每个Item
的每个Process
的第一个order
此图片可能显示得更好(对不起,使用ERD是这样的)
到目前为止,我得到的是这样的:
$enquiry->items->load(['components' => function($query) { $query->with(['processes' => function($query) { $query->orderBy('order')->limit(1) }]); }])->get();
但是它只给我顶层处理,而不是属于给定
Process
的每个Component
的每个Item
的顶层Enquiry
。任何帮助将不胜感激。当然,对于更好的标题的任何帮助也将不胜感激。谢谢。
我有一些嵌套的一对多关系,如下所示:查询hasMany项目Item hasMany组件Component hasMany Process想象我已经加载了查询模型。现在我想...
您是否不能像这样在Component模型上定义关系:
class Component { public function firstProcess() { return $this->hasMany(Process::class)->orderBy('order')->take(1); } }
然后执行以下操作:
$enquiry->load('items.components.firstProcess');
然后您应该能够在每个组件上访问该属性:
foreach ($enquiry->items as $item) { foreach($item->components as $component) { print_r($component->firstProcess); } }
我没有测试此代码。
感谢@PaulSpiegel,它将我定向到正确的方向。这就是我使用QueryBuilder在Laravel中使用子查询的方法。
$subQuery = DB::table('processes as icp')
->selectRaw('min(icp.order), icp.*')
->groupBy('icp.component_id');
$firstProcesses = DB::table('enquiries as enq')
->where('enq.id', $enquiry->id)
->join('items', 'items.enquiry_id', 'enq.id')
->join('components as ic', 'ic.item_id', 'items.id')
->joinSub($subQuery, 'icp', function ($join) {
$join->on('ic.id', 'icp.component_id');
})->get();
您是否不能像这样在Component模型上定义关系:
class Component { public function firstProcess() { return $this->hasMany(Process::class)->orderBy('order')->take(1); } }
然后执行以下操作:
感谢@PaulSpiegel,它将我定向到正确的方向。这就是我使用QueryBuilder在Laravel中使用子查询的方法。
$subQuery = DB::table('processes as icp')
->selectRaw('min(icp.order), icp.*')
->groupBy('icp.component_id');
$firstProcesses = DB::table('enquiries as enq')
->where('enq.id', $enquiry->id)
->join('items', 'items.enquiry_id', 'enq.id')
->join('components as ic', 'ic.item_id', 'items.id')
->joinSub($subQuery, 'icp', function ($join) {
$join->on('ic.id', 'icp.component_id');
})->get();