将Eloquent Builder转换为Query Builder

时间:2016-02-15 19:22:17

标签: php laravel laravel-5

似乎每个人都在问如何将Query \ Builder转换为Eloquent \ Builder。我需要相反的 - 我有一个模型,其中定义了一些范围,我从中创建了一个查询。它返回的结果是我的模型的一个实例。我希望它是一个普通的对象。

获取模型并转换为stdClass并不适合我。

这可能吗?

1 个答案:

答案 0 :(得分:3)

是。您可以使用Eloquent查询构建器构建查询,但是您可以使用基本查询构建器实际执行查询,该构建器将返回stdClass对象。

以下是一个例子。很显然,你可以把所有这些东西连在一起组成一行,但我把它分成了几行来解释发生了什么。假设您的active()型号有User范围:

// 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对象。