【发布时间】:2016-05-26 20:06:39
【问题描述】:
好像大家都在问怎么把Query\Builder转成Eloquent\Builder。我需要相反的 - 我有一个定义了一些范围的模型,我从中创建了一个查询。它返回的结果是我的模型的一个实例。我希望它是一个普通的对象。
获取模型并转换为 stdClass 对我来说似乎不合适。
这可能吗?
【问题讨论】:
好像大家都在问怎么把Query\Builder转成Eloquent\Builder。我需要相反的 - 我有一个定义了一些范围的模型,我从中创建了一个查询。它返回的结果是我的模型的一个实例。我希望它是一个普通的对象。
获取模型并转换为 stdClass 对我来说似乎不合适。
这可能吗?
【问题讨论】:
是的。您可以使用 Eloquent 查询构建器构建查询,然后您可以使用基本查询构建器实际执行查询,这将返回 stdClass 对象。
下面是一个例子。显然,您可以将所有这些东西串联成一行,但我将其分成多行来解释发生了什么。假设您的 User 模型上有一个 active() 范围:
// start an eloquent query but don't execute it yet
$query = User::active();
// add any other conditions...
// get the base builder for the eloquent builder
$baseQuery = $query->getQuery();
// will return a standard array of stdClass objects
$users = $baseQuery->get();
另一个只返回一个对象的例子:
// will return a stdClass object
$user = User::active()->getQuery()->first();
但请注意,您确实会失去 Eloquent 查询功能,例如关系和预加载。
例如:
$user = User::with('posts')->active()->getQuery()->get();
这将不为用户运行帖子查询,并且帖子将不附加到返回的 stdClass 对象。
【讨论】: