作用域的存在避免了在联表查询的链式方法中显式的申明表名,使联表查询语句简洁易懂

在联表查询中select where order limit等方法都有默认作用域,让你明确这些链式方法是作用于那张表。

例如:查找积分前3的用户的id和用户名,及其在$time时间后发布主题的id和标题。

$db->user->select('id', 'name')->sub('account')->order('score', true)->limit(3)->with('post')->select('id', 'title')->where('time', '>', $time)->find();

下面解析下示例中的作用域

1 主表user作用域,$db->user后就进入主表user的作用域,其后接方法select('id', 'name')是作用于主表user也就是查询主表的id与name,直到遇到连表方法才跳出主表作用域进入从表作用域。

2 子查询从表account作用域,sub('account')进入子查询从表account作用域,其后接方法order('rating', true)limit(3)作用于从表account,直到遇到其它连表方法才跳出其作用域进入其它从表作用域。

3 with联表查询从表post作用域,with('post')进入with连表查询从表post作用域,select('id', 'title')where('time', '>', $time)作用于从表post。

4 最后的查询方法find作用域为主表,连表查询最后查询方法get find等的作用域又跳回主表,其参数只作用于主表。

results matching ""

    No results matching ""