如何通过 Eloquent 查询原始数据?

2022-08-30 10:48:46

我正在尝试在我的Laravel应用程序中执行查询,并且我想对我的查询使用正常结构。这个类要么使用Eloquent,所以我需要找到一些东西来做一个完全原始的查询。

可能是类似 .只有这样行不通。Model::query($query);


答案 1

你可以试试这个:

// query can't be select * from table where
Model::select(DB::raw('query'))->get();

例如:

Model::select(DB::raw('query'))
     ->whereNull('deleted_at')
     ->orderBy('id')
     ->get();

此外,您可以使用类似如下的方法(使用查询生成器):

$users = DB::table('users')
                 ->select(DB::raw('count(*) as user_count, status'))
                 ->where('status', '<>', 1)
                 ->groupBy('status')
                 ->get();

此外,您可以尝试类似如下的方法(使用查询生成器):

$users = DB::select('select * from users where id = ?', array(1));
$users = DB::select( DB::raw("select * from users where username = :username"), array('username' => Input::get("username")));

Laravel网站上查看更多相关信息。Raw-Expressions


答案 2

可以使用函数将数组转换为 Eloquent 模型,该模型本身在内部用于将查询结果转换为模型。据我所知,文档中没有提到它。hydrate()Laravel

以下代码等同于:$userModels = User::where('id', '>', $userId)->get();

$userData = DB::select('SELECT * FROM users WHERE id > ?', [$userId]);
$userModels = User::hydrate($userData);

hydrate()函数定义为:\Illuminate\Database\Eloquent\Builder

/**
 * Create a collection of models from plain arrays.
 *
 * @param  array  $items
 * @return \Illuminate\Database\Eloquent\Collection
 */
public function hydrate(array $items) {}

推荐