有没有办法将原始查询映射到模型
Is there a way to map a raw query to a Model
我有一个复杂的原始 SQL 查询,我不想将其重新转换为查询生成器。有没有办法将查询结果映射到模型?
总之,我有这样的疑问:
SELECT users.* FROM users
WHERE exists (super_long_raw_query)
AND many_more_raw_where_clauses
ORDER BY something_complex
etc;
它只有 returns 列来自一个模型(来自对应于一个模型的 table)。
将其转换为 "Laravel Query Builder" 查询会很糟糕 不可读 :
User::where(/* ... */)
->whereExists(function() { /* super complex callback */ } )
->etc(/* ... */)
原始查询更易于阅读(在本例中)。
有没有办法将原始查询映射到模型?(假设只有 returns 特定模型的列)
旁注:这是一个使用查询参数(?
、:something
)的原始查询,因为我不想注入。
您可以使用以下任何一种方法
DB::select('your raw query here');
你可以使用像
这样的原始表达式
DB::raw('your raw query here');
和
等方法
->selectRaw(''),
->whereRaw(''),
->havingRaw('')
查看文档了解详细信息https://laravel.com/docs/5.6/queries#raw-expressions
原始语句将作为字符串注入到查询中,因此您应该格外小心,不要造成 SQL 注入漏洞。
使用 PDO
$sth = $dbh->query("SELECT * FROM user");
$result = $sth->fetchAll(PDO::FETCH_CLASS, "User");
您可以使用 hydrate
方法:
$users = User::hydrate(
DB::select('super_complex_query_with_params', [$params])
);
参见:https://laravel.com/api/5.6/Illuminate/Database/Eloquent/Builder.html#method_hydrate
使用fromQuery()
$query = \Illuminate\Support\Facades\DB::raw('select * from users');
$users = \App\User::fromQuery($query, []);
我有一个复杂的原始 SQL 查询,我不想将其重新转换为查询生成器。有没有办法将查询结果映射到模型?
总之,我有这样的疑问:
SELECT users.* FROM users
WHERE exists (super_long_raw_query)
AND many_more_raw_where_clauses
ORDER BY something_complex
etc;
它只有 returns 列来自一个模型(来自对应于一个模型的 table)。
将其转换为 "Laravel Query Builder" 查询会很糟糕 不可读 :
User::where(/* ... */)
->whereExists(function() { /* super complex callback */ } )
->etc(/* ... */)
原始查询更易于阅读(在本例中)。
有没有办法将原始查询映射到模型?(假设只有 returns 特定模型的列)
旁注:这是一个使用查询参数(?
、:something
)的原始查询,因为我不想注入。
您可以使用以下任何一种方法
DB::select('your raw query here');
你可以使用像
这样的原始表达式DB::raw('your raw query here');
和
等方法->selectRaw(''),
->whereRaw(''),
->havingRaw('')
查看文档了解详细信息https://laravel.com/docs/5.6/queries#raw-expressions
原始语句将作为字符串注入到查询中,因此您应该格外小心,不要造成 SQL 注入漏洞。
使用 PDO
$sth = $dbh->query("SELECT * FROM user");
$result = $sth->fetchAll(PDO::FETCH_CLASS, "User");
您可以使用 hydrate
方法:
$users = User::hydrate(
DB::select('super_complex_query_with_params', [$params])
);
参见:https://laravel.com/api/5.6/Illuminate/Database/Eloquent/Builder.html#method_hydrate
使用fromQuery()
$query = \Illuminate\Support\Facades\DB::raw('select * from users');
$users = \App\User::fromQuery($query, []);