Laravel 急负荷非直接关系拉维

Laravel 急负荷非直接关系拉维,laravel,eager-loading,Laravel,Eager Loading,假设我们有一个用户属于许多课程。课程属于一类。用户将被分配到一个类别中的几个课程,因此他将间接拥有一个类别。 所以我们可以像这样编码 $user->find(1)->with('courses') $user->category=$user->courses->first()->category 让用户了解课程和类别 有没有可能在急着加载的情况下 $user->find(1)->带有('category','courses') 也可以用“with”子句替换发送到闭包的查询。find将返回单个模型

假设我们有一个用户属于许多课程。课程属于一类。用户将被分配到一个类别中的几个课程,因此他将间接拥有一个类别。 所以我们可以像这样编码
$user->find(1)->with('courses')
$user->category=$user->courses->first()->category

让用户了解课程和类别

有没有可能在急着加载的情况下
$user->find(1)->带有('category','courses')


也可以用“with”子句替换发送到闭包的查询。

find
将返回单个模型,因此在此上下文中,对于直接关系,即时加载和延迟加载都是等效的。对于嵌套关系,您仍然可以从即时加载中获益,因为对于每个加载的课程,只需执行一个查询即可加载类别

您可以获得嵌套关系,如下所示:

$user = User::with([ 'courses', 'courses.category' ])->find(1);
// These will be pre-loaded
// $user->courses
// $user->courses[0]->category

当然这是直接的情况,然而,这确实解决了这个问题。@AhmedBahtity约束的设置方式无法指定用户将拥有单一类别的课程,因为每门课程都可以属于不同的类别,并且没有关系约束可以防止出现这种情况。这正是问题的关键所在。框架允许吗?在框架下面,将查询拆分为两个。所以像这样
从用户中选择
然后
从[id of the selected users]
中id所在的类别中进行选择。问题是无法控制id部分在查询中的运行方式。你可以把它们加在一起,我不太明白。当您执行
User::with('categories')->where(condition)
时,将执行类似于
SELECT*FROM users where(condition)
的查询,然后执行
SELECT FROM categories where id in(从以前的查询中检索到的id)
您需要从中删除id吗?我认为如果您共享您的数据结构和约束,这将非常有用。我需要接收这些ID并自己操作它们