假设我有两个模型user和location。模型之间有一个定义的关系,允许我这样做:
$user->location->name;
我不知道这是否可能,但我可以执行搜索使用类似:
$user->location->where('name', '=', 'Paris')->find();
返回给我它的位置命名为Paris的用户?
总之可以。以下是原因。
当您调用find
方法时,ORM将遍历要添加到查询中的所有挂起属性,添加它们并执行查询。在您的示例中,有两个待挂起的规则要添加到查询中。第一个你明确定义的是where('name', '=', 'Paris')
,第二个隐藏在关系$user->location
中。
当你从一个关系中调用一个ORM属性时,它实际上返回一个在关系中定义的ORM对象,这个对象没有加载,但是在它的对象中有一个挂起的where
子句和一个join
。因此,当您最终调用find
方法时,您将在具有两个where
子句和一个join
的位置对象上调用它。